2015-04-20 20 views
9

creo un progetto basato sui ruoli con laravel 5 e Entrust, tutto funziona bene fino a quando provo ad aggiornare l'elenco ruolo di un utente, la sanguinosa "violazione di vincolo integrità" mi ricorda che quando si chiamalaravel 5 Entrust ruoli utente aggiornamento

$user->attachRoles($roles); 

Esso non elimina i ruoli degli utenti prima, così posso controllare le interfacce di usertrait, poi venire con

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

il codice sembra piuttosto brutto, e penso che ci sia tre SQL stato eseguito

ruoli
  • di utente Trova
  • eliminare i rapporti
  • aggiungere nuove relazioni

speravo davvero che sarebbe come

$user->updateRoles($roles); 

che può confrontare ruoli esistenti, e fare un po 'optimazation .

Mi manca qualcosa?

+0

Si prega di aggiungere un po 'di formattazione del codice. – Jost

risposta

12

È possibile utilizzare la funzione $user->roles()->sync($roleKeys). Prende una serie di chiavi di ruolo e dopo l'esecuzione di tutti i ruoli precedenti vengono eliminati.

+0

Mi dispiace, ma chi dovrebbe chiamare il metodo di sincronizzazione? '$ user-> sync ($ roleKyes)' sembra non funzionare, rapporto di errore "metodo non definito". –

+0

Ho modificato la risposta un po '. il metodo sync() viene eseguito nel metodo di definizione della relazione Eloquent. –

+0

Ho provato '$ user-> roles-> sync ($ roleKeys)', quindi ho finito con call sync() su un oggetto Collection. Grazie! –

Problemi correlati