2012-10-29 12 views
16

Iniziare con Symfony2 + Doctrine.C'è un modo per interrogare se il campo dell'array contiene un certo valore in Doctrine2?

Ho una tabella con gli oggetti utente (fos_user), per il quale il mio schema contiene un ruoli colonna di una 'serie' tipo .

Doctrine salva i campi di questo tipo serializzandoli da php 'array' a 'longtext' (nel caso di mysql).

Quindi diciamo che ho le seguenti utenti salvato nella DB:

User1: array(ROLE_ADMIN, ROLE_CUSTOM1) 
User2: array(ROLE_ADMIN, ROLE_CUSTOM2) 
User3: array(ROLE_CUSTOM2) 

Ora, nel mio controller voglio per selezionare tutti gli utenti con set ROLE_ADMIN. C'è un modo per scrivere una query DQL che mi restituisca direttamente Utente1 e Utente2? Oppure devo recuperare tutti gli utenti per fare in modo che Doctrine abbia una colonna unserialize dei ruoli e poi per ognuno di essi fare in_array ('ROLE_ADMIN', $ user-> getRoles())?

Ho cercato il DQL part of the manual, ma finora non ha trovato nulla simile alle mie esigenze ...

UPD: Trovato un question circa la stessa cosa che contiene un codice di query lavoro

+0

Grazie per il collegamento: D – GusDeCooL

risposta

13

È può semplicemente usare la dichiarazione LIKE descritta in questo manuale (sì, anche su oggetti serializzati).

Ti suggerisco di creare una classe di entità per i ruoli e unirla con l'entità utente tramite l'associazione ManyToMany.

+4

Infatti. Questo sembra essere l'unico modo. Trovato una domanda esistente che ha una query esatta che funziona: http://stackoverflow.com/questions/9016914/symfony-2-fos-bundle-how-to-select-users-with-a-specific-role. Usare molti-a-molti sarebbe un'opzione se solo non fossi basato sul FOSUserBundle che memorizza i ruoli in DB :) – dimsuz

Problemi correlati