MassAssignmentException
エラーを生成しているLaravelのfirstOrNew
メソッドを使用してデータを保存しようとしています。Laravel MassAssignmentException from firstOrNew by id
それは単に何かを保存しようとしていない、データベースでを見ているので、firstOrNew
方法は、質量割り当ての例外をトリガすべき理由を私は理解していません。 the docsから:
firstOrNew方法、firstOrCreateのように指定された属性に一致するデータベース内 レコードを検索しようとします。ただし、 モデルが見つからない場合は、新しいモデルインスタンスが返されます。 firstOrNewによって返されたモデル がまだ データベースに保持されていないことに注意してください。
はなぜ、私のコードは、MAEを投げるべきである:データベースとの行がある場合
私が理解したよう$tour = Tour::firstOrNew(array('id' => $this->request['id']));
は、すべてが上記のコードは基本的に「見て、見ていると言っていることそのIDがあればその行を返し、そうでない場合は、関連するプロパティを持つ新しいオブジェクトを作成します。データを保存していないので、問題は何ですか?
エラーは、行が存在しない場合にのみ発生することに注意してください。 ...それは、レコードを見つけられませんでしたあなたは何が起こっているのか、正確に言うテキストをコピーしたとある。
を使用する
$fillable
配列を設定する必要があります。これはあなたのケースではうまくいくかもしれませんが、通常はIDの自動インクリメントであるため、特定のIDを作成したくありません。私はfirstOrオブジェクトを別の属性で宣言します。名前があればそれを取得し、そうでなければその名前でオブジェクトを作成します。また、より適切に聞こえるfindOrFailを調べることも考えられます。https://laravel.com/docs/5.3/eloquent#retrieving-single-models - このIDを持つオブジェクトは存在しますか?もしそれが得られれば、そうでなければ例外をスローする – Djaveおかげさまで、おそらく 'findOrFail'は適切ではないでしょう。 IDは確かに自動インクリメントであり、唯一のユニークなカラムであり、私はなぜそれを使いたいのですか?これをどうやって行うのかわからない。... – Inigo
ええ、聞いている。 Alexey Mezeninの答えは、失敗した理由をすべて網羅しています。あなたが簡単に乗ることを望むなら、私はかなり確信しています。$ tour = Tour :: find($ this-> request ['id']); if(!$ tour)$ tour = new Tour; 'は本当に同じ場所に行かなくても苦労するでしょう。がんばろう! – Djave