web-dev-qa-db-ja.com

Laravel Eloquent-Attach vs Sync

attach()sync()のLaravel 4のEloquent ORMの違いは何ですか?

46
Kousha

attach():

  • 多対多のリレーションを操作するときに関連モデルを挿入する
  • 配列パラメーターは必要ありません

例:

 $ user = User :: find(1); 
 
 $ user-> roles()-> attach(1); 

sync()

attach()メソッドに似ています。 sync()は、関連するモデルをアタッチするためにも使用します。ただし、主な違いは次のとおりです。

  • Syncメソッドは、ピボットテーブルに配置するIDの配列を受け入れます
  • 次に、最も重要、syncメソッドは、モデルが配列に存在しない場合にテーブルからモデルを削除し、ピボットテーブルに新しいアイテムを挿入します。

例:

ser_role

 id user_id role_id 
 1 12 1 
 2 12 5 
 3 12 2 
 $ user = User :: find(12); 
 $ user-> roles()-> sync(array(1、2、3)); 

上記の操作により削除されます:

 id user_id role_id 
 2 12 5 
 

そして、role_id 3をテーブルに挿入します。

ser_roleテーブル

 id user_id role_id 
 1 12 1 
 3 12 2 
 4 12 3 
 
95
Anam

さらにシンプルにするために:

attach関数は、ピボットテーブルにのみレコードを追加します。

sync関数は、現在のレコードを新しいレコードに置き換えます。これは、モデルの更新に非常に役立ちます。

例:

タグIDが[1,2,3]である多くのタグが添付された作成済みの投稿があると仮定します。

また、ユーザーは投稿とそのタグを更新することができます。

ユーザーは新しいタグID [3,4,5]を送信します。

sync関数を使用する場合、投稿の新しいタグは[3,4,5]のみになります。

ただし、attach関数を使用すると、投稿の新しいタグは[1,2,3,4,5]になります。

26
Mahmoud Zalt