Laravel の問題: hasMany 関係レコードの更新の問題
P粉054616867
P粉054616867 2023-08-30 21:47:17
0
1
550
<p>ブランド モデルと hasMany 関係を持つユーザー モデルがあり、ユーザーのブランドを正しく更新できません。 </p> <p>ユーザーがテキストフィールドに自分のブランドを入力/削除/更新できるフォームがあります。ユーザーがブランドを入力または編集した後にユーザーのブランドを更新するために現在使用している方法は、関連付けられている既存のブランドをすべて削除することです。 user を使用して、値をループし、ブランド モデルを作成して、「saveMany」を実行します...しかし、追加するときに制約の競合が発生するようです...これを行うより良い方法があるかどうか疑問に思っています。 /p> <p>私の <code>User</code> モデルには次のようなものがあります;</p> <pre class="brush:php;toolbar:false;">パブリック関数brand() { return $this->hasMany('Brands::class'); } </pre> <p>次に、コントローラーにブランドを更新する次のコードがあります;</p> <pre class="brush:php;toolbar:false;">$user->brands()->delete(); foreach ($request['brands'] as $brand) { $brandArray[] = 新しいブランド([ '名前' => $brand['名前']、 '評価' => $brand['評価'], ]); } !empty($brandArray) && $user->brands()->saveMany($brandArray); </pre> <p>もっと良い方法はありますか? </p>
P粉054616867
P粉054616867

全員に返信(1)
P粉702946921

物事を 3 つの部分に分けてみましょう:

# 制約キー違反:

別のテーブルに外部キー制約を追加し、ブランドを削除する必要がある場合は、外部キーによって制約されている関連データもすべて削除する必要があります。

#### デザイン###

ブランド関連データを削除できない場合は、より良いデザインがないか検討できるかもしれません。ユーザーがデータを削除するたびに DELETE API を呼び出すフックをフロントエンドに追加できるかもしれません。

#お問い合わせ

ブランドにいくつかの一意のキーがある場合は、saveMany の代わりに

upsert

を使用できます。これはより効率的になります。 ####結論は### ユーザーがブランドを削除するたびにフロントエンドのフックを介してブランドを削除し、

upsert

を使用して

コンテンツ

の作成と更新を処理することをお勧めします。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート