Voglio rimuovere l'utente amministratore dalla mia raccolta. So che è la chiave primaria nella tabella (id) è 1. Ma quando uso forget(1)
cancella l'elemento dell'array nella raccolta a partire da 0. Come faccio a rimuovere l'elemento dalla collezione dall'ID?Laravel: come rimuovere l'elemento dalla raccolta da id
risposta
Invece di provare a eliminare un elemento dalla raccolta, sarebbe meglio non selezionarlo mai in primo luogo.
Si potrebbe aggiungere un vincolo alla tua richiesta DB in questo modo:
$users = User::where('role', '!=', 'admin')->get();
(potrebbe essere leggermente diverso a seconda di come i ruoli sono definiti nello schema).
Se si utilizza uno schema più complesso, con un roles
tavolo separato e user_role
tabella, è possibile interrogare in questo modo:
$users = User::whereHas('roles', function($q){
$q->where('role', '!=', 'admin');
})->get();
E 'una cattiva idea quella di fare affidamento su l'utente admin essere sempre la prima voce la collezione. Che cosa succede se in seguito si desidera avere più utenti amministratori o per ordinare l'elenco utenti in base alla data di registrazione? Se davvero si vuole rimuovere admin dalla raccolta, Eloquente è dotato di funzionalità di filtraggio:
$usersWithoutAdmins = $users->filter(function($user)
{
return !$user->hasRole('admin');
});
Risposta molto bella. Sto usando Confide/Entrust che corrisponderebbe alla tua seconda soluzione, tranne che usa la colonna 'name' invece di' roles'. La soluzione non seleziona gli utenti che non hanno alcun ruolo assegnato ... Dovrò imporre ruoli di assegnazione a tutti gli utenti che probabilmente dovrei fare comunque ... quindi eccessivo per quello di cui avevo bisogno, ma vabbè. Non mi ci vorrà tanto tempo per sperare. – Phil
Ho incontrato molte difficoltà con Confide/Entrust cercando di salvare la relazione per il ruolo ... per favore vedi [laravel-how-to-query-to-get-all-records-except-where-relation-has-name-column ] http://stackoverflow.com/questions/28095206/laravel-how-to-query-to-get-all-records-except-where-relation-has-name-column se sai come fare il tuo 2 ° query che mi hai mostrato per ottenere gli utenti che non hanno ruoli pure. – Phil
Come tale risposta bencohenbaritone s' è il modo migliore per risolvere questo problema, devo aggiungere che laravel Eloquente Collection ha il metodo except()
, che può rimuovere oggetti Eloquent dalla raccolta tramite la chiave primaria anziché forget()
. Quest'ultimo rimuove per chiave dell'indice di raccolta (come array[i]
) e non per chiave primaria.
Così si può scrivere qualcosa di simile (dispiace per il cattivo esempio, il mio caso d'uso è troppo diverso per essere utile per gli altri):
$admin_user_id = 20;
$users = User::all();
$users_without_admin = $users->except($admin_user_id);
Questo mi ha aiutato, perché ho una situazione che non posso fare correttamente con una query solo database e questo era solo il biglietto! – mydoglixu
- 1. Ordinamento della raccolta Laravel tramite l'array di ID
- 2. Autorizzazione Laravel per raccolta Eloquent
- 3. Rimuovere elemento dalla raccolta durante l'iterazione con forEach
- 4. Come verificare in PyMongo se la raccolta esiste e se esiste vuota (rimuovere tutto dalla raccolta)?
- 5. jpa rimozione bambino dalla raccolta
- 6. Rimuovi elemento dalla raccolta Backbone
- 7. Come rimuovere ID e titolo da questo URL?
- 8. Come rimuovere elementi dalla matrice?
- 9. Rimuovere reationship da molti-a-molti modelli in laravel 4
- 10. Riferimento articolo successivo in una raccolta Laravel
- 11. MongoDB, rimuovere l'oggetto dalla gamma
- 12. Come rimuovere (rimuovere) un elemento di raccolta dopo averlo recuperato?
- 13. Come rimuovere la raccolta denominata "gruppo"?
- 14. Backbone.js: Crea array JSON dalla raccolta
- 15. API RESTful - Array alla raccolta Laravel 5
- 16. Leaflet.js: Come rimuovere più livelli dalla mappa
- 17. Come rimuovere System.out.println dalla codebase
- 18. come rimuovere $ id durante la serializzazione JSON
- 19. Laravel 5 Come passare dalla modalità Produzione
- 20. NodeJS + MongoDB: raccolta dati dalla raccolta con findOne()
- 21. MongoDB rimuovere elemento dalla matrice
- 22. Trova e rimuovi elementi dalla raccolta
- 23. Come rimuovere un sottoinsieme di elementi da una raccolta di Entity Framework
- 24. Mongoose.js: rimuovere raccolta o DB
- 25. Come accedere all'ennesimo oggetto in un oggetto di raccolta Laravel?
- 26. controllo laravel se la raccolta è vuoto
- 27. Python: rimuovere dizionario dalla lista
- 28. Mappa AutoMapper dalla raccolta nidificata di origine a un'altra raccolta
- 29. rimuovere i tag HTML da stringhe sulla lama laravel
- 30. Controllo di Laravel se una raccolta contiene una chiave esterna
vuoi dire, non si desidera eliminare dal database che ? solo dalla collezione $ users? –
sì. non voglio visualizzare l'utente amministratore nell'elenco di utenti sulla mia vista. – Phil
possibile duplicato di [Dimentica non funziona] (http://stackoverflow.com/questions/20735181/forget-doesnt-work) – ceejayoz