2016-09-02 61 views
14

私はLaravelとEloquentを2年間使用していますが、今日は新鮮なLaravel 5.3をインストールしてそれを試してみました。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型の列です。代わりに、私は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関連の問題ですか、私は何かが足りないのですか?あなたの助けを前にありがとう。

答えて

40

エラーの理由は@Nicklasによって説明されています。

しかし、これは現在、Laravel 5.3がデフォルトでMySQL用にstrictモードを使用しているという理由によるものです。

以前の動作に戻す場合は、config/database.phpファイルを更新し、接続には'strict' => falseを設定してください。

+1

あの卑劣な息子... – swt83

9

「URL」属性を持たないオブジェクトを、デフォルト値のない「URL」列を持つ表に挿入しようとしています。したがって、データベースはその列で何をすべきかを知ることができません。

3つのうちの1つを実行できます。

  1. は、デフォルト値を含めるようにURL
  2. 変更URLスキーマでヌル挿入できるように作成
  3. 変更にURL値でスキーマを記入してください。 (空文字列)

さらなるヘルプが必要な場合は、移行またはスキーマをポストしてください。

+0

nullでないフィールドにnull値を挿入しようとすると、mysqlはエラーを返さないはずですか? – Sherif

+1

はい?この場合、彼はヌル値でなくフィールドに何も挿入していないだけです。 –

+0

私の状況では、私は空の列を持っています。デフォルトでnullable()にしたとき、すべてうまく動作し始めました。 –

関連する問題