2016-09-21 14 views
0

新しいlaravelプロジェクトをインストールしました。その後、新しいモデルを作成しましたが、create()関数を使用すると、新しい行が重複していることがわかります。

これは私のコードです:

protected $fillable = ['id', 'setting_name', 'expected_type', 'default_val', 'modified_val']; 
    // protected $guarded = ['created_at', 'updated_at']; 
function test() { 
    $input = ['setting_name' => 'Test', 
        'expected_type' => '123', 
        'default_val'=>'123', 
        'modified_val'=>'123']; 
        // dd($input); 
//both next two lines do not working 
Setting::create($input); 
    return Setting::firstOrNew($input); 
} 

私はエラーをチェックする:

"Integrity constraint violation: 1062 Duplicate entry '' for key 'setting_name' (SQL: insert into settings (updated_at, created_at) values (1474452834, 1474452834))" 

私が間違っていましたか?

+0

あなたが使用したいメソッドが 'firstOrNew()'ではなく 'findOrNew'であると思います - 詳細はこちらhttp://stackoverflow.com/a/23325732/1739852 – James

+0

申し訳ありませんが、質問は、findOrNewまたはfirstOrNewは今私のための問題ではありません。私はデータベースに挿入したい。 – Einsamer

+0

firstOrNew()の代わりにfirstOrCreate()を試した場合は?..?毎週 –

答えて

0

エラーは、テーブルに既に存在するsetting_nameの行を挿入しようとしており、この列にはuniqueという制約があります。

したがって、この行を1回だけ挿入し、同じsetting_name値を持つ他の行がないことを確認してください。

+0

create()メソッドが重複しているため、$ inputから何も取得せずにsql: (1474452834、1474452834)設定値がNULL値で挿入されました – Einsamer

+0

これは、エラーが存在していることを示しています。BTW、$ fillableをコントローラに入れましたか? –

+0

いいえ、私はそれを置く設定モデル – Einsamer

0

私のモデルのために__constructorを作成したので、なぜオブジェクトを正常に作成できなかったのか分かりました。 私はそのコンストラクタを削除し、うまく動作します。 :D