私はLaravelとEloquentを2年間使用していますが、今日は新しいLaravel 5.3をインストールして、それを試してみることにしました。
私は古いデータベーススキーマを使用し、モデルを作成し、入力可能な列を定義しました。これは私のPage
モデルのようです:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Page extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'language',
'title',
'slug',
'url',
'description',
'tags',
'wireframe',
'order',
'is_active'
];
public function menus()
{
return $this->belongsToMany(Menu::class);
}
}
url
属性はMySQLのTEXT
- type列です。したがって、モデルの作成時に値を渡さない場合、空の文字列にする必要があります。代わりに、SQLSTATE[HY000]: General error: 1364 Field 'url' doesn't have a default value
エラー。
Postモデルを作成する私の試みは次のとおりです。
Page::create([
'title' => $root_menu['title'],
'slug' => $root_menu['slug'],
'language' => $this->language,
'wireframe' => key(config('cms.wireframe')),
'order' => 0
]);
これはLaravel 5.3関連の問題ですか、それとも何か不足していますか?助けてくれてありがとう。
エラーの理由は@Nicklasによって説明されています。
ただし、現在これが行われている理由は、Laravel 5.3はデフォルトでMySQLに対してstrict
モードを使用するためです。
以前の動作に戻したい場合は、config/database.php
ファイルおよび設定'strict' => false
接続用。
「URL」属性のないオブジェクトを、デフォルト値のない「URL」列を持つテーブルに挿入しようとしています。そのため、データベースはその列をどうするかを知ることができません。
次の3つのいずれかを実行できます。
さらにサポートが必要な場合は、移行またはスキーマを投稿してください。