2017-01-30 3 views
0

私はlaravel 5.3を使用しています。私のカスタムモデルでは、次のようないくつかの保護されたフィールドがあります。データベースに保護されたフィールドの値を追加する方法

protected $guarded = ['id', 'tnant_id', 'org_id', 'fac_id', 'slug', 'created_at', 'updated_at', 'deleted_at']; 

今、次のようにレコードを追加しようとします。

CUSTOM::create(['tnant_id'=>123]); 

私は以下のエラーを返します。

たびに、私は値を渡していますし、それがすべて守らフィールドにエラーを与えているので、テーブルのフィールドのデフォルト値は動作しません設定
Field 'tnant_id' doesn't have a default value. 

どのように私はデータベースにガードフィールドの値を追加できますか?更新クエリでは、更新を許可していますが、作成時にはエラーが発生します。

+2

'CUSTOM :: create( 'tnant_id' => 123);' try '$ custom = new CUSTOM(); $ custom-> tnant_id = '123'; $ custom-> save(); ' – xhulio

答えて

1

あなたは単純にできません。 Model::create(array $attributes = [])は、方法fill(array $attributes = [])を使用しています。これは、すべての保護された属性を除外するため、割り当てられません。したがって、作成時点でtnant_idはnullになります。

私はこれを行うための二つの方法を考え出す:

  1. 新しいモデルのインスタンスを作成するには、それがdabaseする(持続)を保存
  2. あなたの属性を設定します。だから、

$model = new Model; 
$model->tnant_id = 123; 
$model->save(); 

Bは これは作成可能性が高いの更新ですが、あなたのために役に立つかもしれません。

  1. DBスキーマを変更して、属性にnull値を許可するか、デフォルト値を設定します。
  2. モデルを使用してモデルを作成する:: create()
  3. 設定属性&更新。

ので: はあなたの移行ファイルの使用中に、あなたが移行を使用していると仮定すると:

Schema::create(.. 
    $table->integer('trant_id')->nullable(); 
    //OR 
    $table->integer('trant_id')->default(0); 
...); 

:それはあなたがケースを使用するために、より適している1言うのは難しいのですが、私は参照をあなたの属性はtrant_idと呼ばれています。これは私が推測する何らかの形なので、より良い答えかもしれないEloquent's relationshipを見てみることをお勧めします。

関連する問題