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é!
attach ():
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:
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
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].