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é!
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
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].