Monday, November 11, 2019

laravel Attach vs Sync difference.

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