web-dev-qa-db-ja.com

Laravel 5.3モデルの作成が「フィールドにデフォルト値がありません」を返します」

私は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関連の問題ですか、それとも何か不足していますか?助けてくれてありがとう。

14
Guney

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

ただし、現在これが行われている理由は、Laravel 5.3はデフォルトでMySQLに対してstrictモードを使用するためです。

以前の動作に戻したい場合は、config/database.phpファイルおよび設定'strict' => false接続用。

42
patricus

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

次の3つのいずれかを実行できます。

  1. 作成にURL値を入力します
  2. スキーマを変更して、URLにnullを挿入できるようにします
  3. URLスキーマを変更して、デフォルト値を含めます。 (空の文字列)

さらにサポートが必要な場合は、移行またはスキーマを投稿してください。

10