Laravel Éloquent - Joindre vs Sync

Quelle est la différence entre attach() et sync() dans L'Orme éloquent de Laravel 4? J'ai cherché partout, mais je n'ai rien trouvé!

34
demandé sur dayuloli 2014-05-31 13:25:16

2 réponses

attach ():

  • insérez des modèles connexes lorsque vous travaillez avec des relations de plusieurs à plusieurs
  • aucun paramètre de tableau n'est attendu

Exemple:

$user = User::find(1);

$user->roles()->attach(1);

sync ()

semblable au attach() méthode. sync() utiliser aussi pour attacher des modèles connexes. Toutefois différence principale est:

  • la méthode Sync accepte un tableau D'IDs à placer sur le pivot la table
  • Secundo,le plus important, la méthode sync supprimera les modèles de la table si le modèle n'existe pas dans le tableau et insérera de nouveaux éléments à la table pivot.

Exemple:

user_role

id  user_id role_id
1    2       1
2    2       5
3    2       2
$user->roles()->sync(array(1, 2, 3));

L'opération ci-dessus va supprimer:

id  user_id role_id
2    2       5

Et insérez role_id 3 à la table.

table user_role

id  user_id role_id
1    2       1
3    2       2
4    2       3

75
répondu Anam 2014-12-18 07:10:45

Pour le rendre encore plus simple:

attach fonction ajoute seulement des enregistrements à la table de pivotement.

sync la fonction remplace les enregistrements actuels par les nouveaux enregistrements. Ceci est très utile pour mettre à jour un modèle.

Exemple:

en supposant que vous avez un Post créé qui a beaucoup de Tags attachés là où les Tags ID sont [1,2,3].

Et l'utilisateur a la possibilité de mettre à jour le Poste et ses Balises.

l'utilisateur vous enverra les nouveaux identifiants de balises [3,4,5].

Si vous utilisez le sync fonction, les nouvelles Balises de la Poste sera [3,4,5] une seule.

Mais si vous utilisez le attach fonction, les nouvelles Balises de la Poste sera [1,2,3,4,5].

15
répondu Mahmoud Zalt 2016-10-21 15:05:21