Laravel Eloquent - Attach vs Sync - mit Beispiel

Hier ist ein Beispiel, das den Unterschied zwischen dem Verwenden von "attach()" und "sync()" in Laravel Eloquent demonstriert:

Angenommen, wir haben zwei Modelle - "User" und "Role". Ein Benutzer kann mehrere Rollen haben, und eine Rolle kann mehreren Benutzern zugewiesen werden. Dies ist eine viele-zu-viele Beziehung, und wir haben eine Pivot-Tabelle namens "role_user", um die Beziehungen zu verwalten.

// Füge eine Rolle zu einem Benutzer hinzu
$user = User::find(1);
$user->roles()->attach(2); // Fügt die Rolle mit der ID 2 dem Benutzer mit der ID 1 hinzu

// Jetzt hat der Benutzer die Rolle 2 zusätzlich zu allen bestehenden Rollen.

// Synchronisiere Rollen für einen Benutzer
$user = User::find(1);
$user->roles()->sync([2, 3]); // Synchronisiert die Rollen 2 und 3 mit dem Benutzer 1

// Jetzt hat der Benutzer nur die Rollen 2 und 3 und alle anderen Rollen, die der Benutzer zuvor hatte, werden entfernt.

Wie man sieht, fügt attach() einfach eine neue Rolle zum Benutzer hinzu, ohne bestehende Rollen zu beeinflussen, während sync() die Rollen des Benutzers durch die angegebenen Rollen ersetzt.

Ein anderes Beispiel könnte eine Blog-Website sein, auf der ein Benutzer mehrere Beiträge haben und ein Beitrag mehreren Benutzern zugewiesen werden kann.

// Füge einen Beitrag zu einem Benutzer hinzu
$user = User::find(1);
$user->posts()->attach(2); // Fügt den Beitrag mit der ID 2 der Beitrags-Sammlung des Benutzers hinzu

// Jetzt hat der Benutzer den Beitrag 2 zusätzlich zu allen bestehenden Beiträgen.

// Synchronisiere Beiträge für einen Benutzer
$user = User::find(1);
$user->posts()->sync([2, 3]); // Synchronisiert die Beiträge 2 und 3 mit dem Benutzer 1

// Jetzt hat der Benutzer nur die Beiträge 2 und 3 und alle anderen Beiträge, die der Benutzer zuvor hatte, werden entfernt.

In diesem Beispiel fügt attach() einfach den Beitrag mit der ID 2 zur Beitrags-Sammlung