attach():
- Insert related models when working with many-to-many relations
- No array parameter is expected
Example:
$user = User::find(1); $user->roles()->attach(1);
sync()
Similar to the
attach()
method. sync()
also use to attach related models. However main difference is:- Sync method accepts an array of IDs to place on the pivot table
- Secondly, most important, The sync method will delete the models from table if model does not exist in array and insert new items to the pivot table.
Example:
user_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));
The above operation will delete:
id user_id role_id 2 12 5
And insert
role_id 3
to the table.
user_role table
id user_id role_id 1 12 1 3 12 2 4 12 3
$user()->roles()->detach($oldIDs)
followed by$user()->roles()->attach($newIDs)
is the same as$user()->roles()->sync($newIDs)
, right? – Kousha May 31 '14 at 23:25