Posted on: January 29, 2020 12:18 PM
Posted by: Renato
Views: 1466
Qual é a diferença entre attach () e sync () no Eloquent ORM?
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 2 1 2 2 5 3 2 2
$user->roles()->sync(array(1, 2, 3));
The above operation will delete:
id user_id role_id 2 2 5
And insert role_id 3
to the table.
user_role table
id user_id role_id 1 2 1 3 2 2 4 2 3
To make it even simpler:
The attach
function only add records to the Pivot table.
The sync
function replaces the current records with the new records. This is very useful for updating a model.
Example:
Assuming you have a created Post that has many Tags attached on it where the Tags ID's are [1,2,3].
And the user has the ability to update the Post and its Tags.
The user will send you the new Tags ID's [3,4,5].
If you use the sync
function, the new Tags of the Post will be [3,4,5] only.
But if you use the attach
function, the new Tags of the Post will be [1,2,3,4,5].
Donate to Site
Renato
Developer