2015-04-20 13 views
9

tworzę projekt oparty na rolach z laravel 5 oraz powierzanie, wszystko działa dobrze, dopóki próbuję aktualizować listę ról użytkownika, krwawa „Integrity ograniczenie naruszenie” przypomina mi, że podczas wywoływanialaravel 5 zlecić role aktualizacja użytkowników

$user->attachRoles($roles); 

nie usuwać role uytkownika pierwszy, więc dajcie mi interfejsy usertrait, a następnie wymyślić

$user->detachRoles($user->roles); 
$user->attachRoles($roles); 

kod wygląda bardzo brzydki, i myślę, że jest trzy SQL została wykonana

Role
  • Znajdź użytkownika
  • usuwać relacje
  • dodać nowe relacje

Byłem naprawdę nadzieję, że to będzie jak

$user->updateRoles($roles); 

który można porównać istniejące role, i zrobić kilka optimazation .

Czy brakuje mi czegoś?

+0

Proszę dodać formatowanie kodu. – Jost

Odpowiedz

12

Można użyć funkcji $user->roles()->sync($roleKeys). Pobiera tablicę kluczy ról i po wykonaniu wszystkich poprzednich ról są usuwane.

+0

Przykro mi, ale kto powinien zadzwonić do metody synchronizacji? '$ user-> sync ($ roleKyes) wydaje się nie działać, raport o błędzie" niezdefiniowana metoda ". –

+0

Edytowałem odpowiedź nieco. Metoda sync() jest uruchamiana w metodzie Eloquent definiującej relację. –

+0

Próbowałem '$ user-> role-> sync ($ roleKeys)', więc zakończyłem wywołanie sync() na obiekcie Collection. Dzięki! –