2017-04-03 34 views
5

私はこのエラーが発生しており、私がチェックしたグーグルの結果は私の問題と似ていません。Laravel 5.4フィールドにデフォルト値がありません

私は、ユーザーをクラスディールでアプリケーションを持っている、と

取引が多くの試合を持って一致します。 ユーザーには多くの一致があります。 ユーザーには多くの取引があります。

私はこれが私のマッチクラスで、私は

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'); 
    } 
} 

必要なすべての関係を定義していると私はときに私、このエラーを取得しておく

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

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

新しいマッチを作成しようとします。

QueryException in Connection.php line 647: SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into matches (deal_id) values (1))

私は空の配列であることを守っていますが、何が問題なのでしょうか?

+0

ピボットテーブルの場合、matchesにモデルクラスがある理由は次のとおりです。https://laravel.com/docs/5.0/eloquent#working-with-pivot-tables – Indra

+0

これは通常、 NULLにすることができないか、デフォルト値を持たない特定のフィールドを挿入しないでください。あなたの 'user_id'は挿入されません – Cr1xus

+0

@ Cr1xus、はい私の 'user_id'は挿入されません、私の問題は今なぜです、それは私の作成メソッドでそれを見ることです。 –

答えて

9

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

protected $fillable = ['user_id', 'deal_id']; 
+1

これを実行しますが、ドキュメントに基づいて_guarded_を使用すると間違ったことはありません。 –

1

アレクセイMezeninの回答は正しいと良いものです。

ガードされた空の配列を維持したいと思う人のために、もう1つの方法は、新しいMatchオブジェクトを作成し、属性を入れて保存することです。以前の動作に戻すしたい場合

  $match->user_id = $id; 
      $match->deal_id = $deal->id; 
      $match->matched_on = $match->freshTimestamp(); 
      $match->save(); 
7

、あなたの

config/database.php

ファイルを更新し、接続のための'strict' => falseを設定します。

+0

職人によるクリアコマンドを実行する必要がありますか? – blamb

+1

Laravel 5.5 php artisan migrate:new-seededとfun: – grantDEV

+1

に新しいコマンドを使用してください。だからあなたの言うことは、移行の再実行が必要ですか?記録のためには、それは 'php artisan migrate:refresh -seed'だと思います。新鮮なものがなければ私は知らない。 ;-) – blamb

関連する問題