web-dev-qa-db-fra.com

Laravel Eloquent - Attacher vs Sync

Quelle est la différence entre attach() et sync() dans Laravel ORM éloquent de 4? J'ai essayé de regarder autour de moi, mais je n'ai rien trouvé!

46
Kousha

attach ():

  • Insérer des modèles associés lorsque vous travaillez avec des relations plusieurs à plusieurs
  • Aucun paramètre de tableau n'est attendu

Exemple:

 $ utilisateur = utilisateur :: find (1); 
 
 $ utilisateur-> rôles () -> attach (1); 

sync ()

Similaire à la méthode attach(). sync() permet également de joindre des modèles associés. Cependant la différence principale est:

  • La méthode de synchronisation accepte un tableau d'ID à placer sur le tableau croisé dynamique
  • Deuxièmement, le plus important, La méthode de synchronisation supprimera les modèles de la table si elle n’existe pas dans le tableau et insérera de nouveaux éléments dans la table pivot.

Exemple:

ser_role

 id user_id role_id 
 1 12 1 
 2 12 5 
 3 12 2 
 $ utilisateur = utilisateur :: find (12); 
 $ utilisateur-> rôles () -> sync (tableau (1, 2, 3)); 

L'opération ci-dessus supprimera:

 id user_id role_id 
 2 12 5 
 

Et insérez role_id 3 à la table.

table user_role

 id user_id role_id 
 1 12 1 
 3 12 2 
 4 12 3 
 
95
Anam

Pour simplifier encore:

La fonction attach ajoute uniquement des enregistrements à la table de pivot.

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

Exemple:

En supposant que vous ayez une publication créée à laquelle sont attachées de nombreuses balises et dont les identifiants sont [1,2,3].

Et l'utilisateur a la possibilité de mettre à jour la publication et ses balises.

L'utilisateur vous enverra le nouvel identifiant de balises [3,4,5].

Si vous utilisez la fonction sync, les nouvelles balises de la publication seront [3,4,5] seulement.

Mais si vous utilisez la fonction attach, les nouvelles balises de la publication seront [1,2,3,4,5].

26
Mahmoud Zalt