有没有办法查询数组字段是否包含Doctrine2中的某个值?

时间:2012-10-29 16:58:36

标签: php mysql symfony doctrine-orm

从Symfony2 + Doctrine开始。

我有一个包含User对象(fos_user)的表,我的架构包含'array'类型的 roles 列。

Doctrine通过将它们从php'array'序列化为'longtext'(在mysql的情况下)来保存这种类型的字段。

因此,假设我将以下用户保存到数据库中:

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

现在在我的控制器中,我想选择所有设置了ROLE_ADMIN的用户。 有没有办法编写一个直接返回 User1 User2 的DQL查询? 或者我是否需要获取所有用户以使Doctrine取消序列化角色列,然后为每个用户执行 in_array('ROLE_ADMIN',$ user-> getRoles())

我搜索了DQL part of the manual,但到目前为止没有发现任何类似于我的需求...

UPD:找到一个question,其中包含一个包含工作查询代码的相同内容

1 个答案:

答案 0 :(得分:13)

您可以简单地使用本手册中描述的LIKE语句(是的,甚至是序列化对象)。

我建议您为角色创建一个实体类,并通过 ManyToMany 关联将其与用户实体连接。