Есть ли способ запроса, если в поле массива содержится определенное значение в 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 ту же самую вещь, которая содержит рабочий код запроса
Ответы
Ответ 1
Вы можете просто использовать инструкцию LIKE
, описанную в этом руководстве (да, даже на сериализованных объектах).
Я предлагаю вам создать класс сущности для ролей и присоединиться к нему с пользовательским объектом по ассоциации ManyToMany.