What is the difference between attach()
and sync()
in Laravel 4's Eloquent ORM? I've tried to look around but couldn't find anything!
The attach function only adds records to the Pivot table. The sync function replaces the current records with the new records. This is very useful for updating a model.
The detach method Similarly, if you want to remove a certain entity relationship from the pivot table, you can use detach method. For instance, if you want to remove a certain author from a book you can do like so. $book->authors()->detach($authorId); Or you can pass multiple IDs as an array.
hasMany relationship in laravel is used to create the relation between two tables. hasMany means create the relation one to Many. For example if a article have comments and we wanted to get all comments of the article then we can use hasMany relationship .
You just need to pass the array of options with id, if id is present already in the database then it will update, if id is blank it will add a new record, If Id was there but not in your new array, then that record will get deleted.
attach():
Example:
$user = User::find(1); $user->roles()->attach(1);
sync():
Similar to the attach()
method, the sync()
method is used to attach related models. However, the main differences are:
sync()
accepts an array of IDs to place on the pivot tableExample:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With