Есть ли способ запроса, если в поле массива содержится определенное значение в Doctrine2? - программирование

Есть ли способ запроса, если в поле массива содержится определенное значение в Doctrine2?

Начиная с Symfony2 + Doctrine.

У меня есть таблица с объектами User (fos_user), для которой моя схема содержит столбец ролей типа 'array'.

Doctrine сохраняет поля этого типа, сериализуя их из php 'array' в 'longtext' (в случае mysql).

Итак, скажем, у меня есть следующие пользователи, сохраненные в БД:

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

Теперь в моем контроллере я хочу выбрать всех пользователей с установленным ROLE_ADMIN. Есть ли способ написать DQL-запрос, который будет напрямую возвращать мне User1 и User2? Или мне нужно, чтобы все пользователи имели Doctrine для несериализации столбца ролей, а затем для каждого из них выполнялись in_array ('ROLE_ADMIN', $user- > getRoles())?

Я искал часть DQL руководства, но до сих пор не нашел ничего похожего на мои потребности...

UPD: Найдите question ту же самую вещь, которая содержит рабочий код запроса

4b9b3361

Ответ 1

Вы можете просто использовать инструкцию LIKE, описанную в этом руководстве (да, даже на сериализованных объектах).

Я предлагаю вам создать класс сущности для ролей и присоединиться к нему с пользовательским объектом по ассоциации ManyToMany.