Lavel Wersja 7.0.

Mam model Team i User model, team_has_users.

team_has_users Tabela ma team_id, user_id, role kolumny.

Jeden użytkownik może należeć do jednego zespołu z różnymi rólami.

Na przykład jeden użytkownik może należeć do jednego zespołu jako klienta i jako pracownika.

W modelu Team Ustawiam taką relację.

public function users(){
   return $this->belongsToMany(User::class, 'team_has_user', 'team_id', 'user_id')
       ->withPivot('role');
}

Kiedy dołączę użytkowników do zespołu, to działało dobrze.

    $item->users()->attach($request->clients, ['role'=>'client']);
    $item->users()->attach($request->employees, ['role'=>'employee']);

Ale kiedy zamierzałem je zsynchronizować, nie mogłem tego zrobić.

Próbowałem wyszukać i znalazłem podobny syncwithoutDetaching, ale wydaje się, że nie pasuje do mojego przypadku. Tabela team_has_users może być taki.

team_id    user_id    role
1           1         client
1           1         employee
1           2         client
1           1         other
...

Czy ktoś może mi pomóc?

Dziękuję Ci!

3
lovecoding 21 lipiec 2020, 09:07

1 odpowiedź

Najlepsza odpowiedź

Podczas gdy dołączyć Możesz przejść dodatkową tablicę, gdy minąłeś.

$item->users()->attach($request->clients, ['role'=>'client']);
$item->users()->attach($request->employees, ['role'=>'employee']);

Ale w synchronizacji musisz przekazać wartość obrotową wewnątrz tablicy, wspominam o przykładzie poniżej.

$item->roles()->sync([1 => ['role' => 'client'], 2 => ['role' => 'employee']);

Sprawdź Dokumentacja część synchroniczna,

1
Dilip Hirapara 21 lipiec 2020, 06:11