Laravel Eloquent - Attach vs Sync

后端 未结 2 1763
情话喂你
情话喂你 2020-11-30 18:53

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!

相关标签:
2条回答
  • 2020-11-30 19:27

    To make it even simpler:

    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.

    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.

    If you use the attach function, the new Tags of the Post will be [1,2,3,4,5].

    0 讨论(0)
  • 2020-11-30 19:34

    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, 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 table
    • Secondly, most important, the sync method will delete the data from the pivot table if the model does not exist in the array, and insert only the 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
    
    
    0 讨论(0)
提交回复
热议问题