Laravel 5.4のフィールドがデフォルト値を持っていません。

私はこのエラーに悩まされており、グーグルで調べた結果はどれも私の問題と同様ではありませんでした。

Dealクラス、Userクラス、Matchesクラスを持つアプリケーションを作成しました。

案件には多くのマッチがあります。 ユーザは多くのマッチを持ちます。 ユーザが多くの案件を持つ。

ディールオブジェクトを使用して新しいマッチを作成しようとしています。

$deal->matches()->create(['user_id'=>$id]);

これは私のマッチクラスで、必要なリレーションシップをすべて定義しています。

class Match extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $guarded = [];
    public $timestamps = false;
    public $expired_on = "";

    public static function boot()
    {
        parent::boot();

        static::creating(function ($model) {
            $model->matched_on = $model->freshTimestamp();
        });
    }

    public function __construct(){
        $d = (new \DateTime($this->matched_on))->modify('+1 day');
        $this->expired_on = $d->format('Y-m-d H:i:s');
    }

    /**
     * Get the user that owns the match.
     */
    public function user()
    {
        return $this->belongsTo('App\User');
    }

    /**
     * Get the deal that owns the match.
     */
    public function deal()
    {
        return $this->belongsTo('App\Deal');
    }
}

そして、新しいマッチを作成しようとすると、このエラーが発生します。

QueryException in Connection.php line 647: sqlstate[hy000]:一般的なエラーです。1364 Field 'user_id' doesn't have a default value (SQL: insert into matches (deal_id) values (1)).

私は私のガードが空の配列になるように持っている、何が問題なのでしょうか?

質問へのコメント (3)
ソリューション

guarded配列を削除し、代わりにfillable` を追加します。

protected $fillable = ['user_id', 'deal_id'];
解説 (1)

以前の動作に戻したい場合は、アップデートしてください。

config/database.php を更新してください。

ファイルを更新し、接続に 'strict' => false を設定してください。

解説 (4)

私の場合はユニークなフィールドだったので、無効にすることはできませんでした。

私にとって、問題を引き起こしている空のコンストラクターがいた理由はわかりません。 理由がわかっている場合はコメントしてください。

public function __construct(){

}

コメント/削除すると問題が解決しました。

解説 (1)

**アレクセイ・メゼニンさんの回答は正しく、良いものです。

ガードされた空の配列を維持したい人のために、私が使った別の方法は、新しいマッチオブジェクトを作成し、属性を入れて保存することです。

            $match->user_id = $id;
            $match->deal_id = $deal->id;
            $match->matched_on = $match->freshTimestamp();
            $match->save();
解説 (0)