php - 如何在dql中搜索实体数组?

标签 php symfony dql

我正在尝试过滤掉具有 super 管理员角色的管理员。为什么以下不起作用?

public function findAdmins()
{
    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb
        ->select('a')
        ->from('MyBundle:Admin', 'a')
        ->where($qb->expr()->notIn('ROLE_SUPER_ADMIN', 'a.roles'));

    $result = $qb->getQuery()->execute();

    return $result;
}

它会给我以下错误:

[Syntax Error] line 0, col 68: Error: Expected Literal, got 'a' 

DQL 查询如下所示:

SELECT a FROM MyBundle:Admin a WHERE ROLE_SUPER_ADMIN NOT IN(a.roles)  

角色本身不是一个实体。它只是一个字符串数组。

$roles = array('ROLE_ADMIN', 'ROLE_SUPER_ADMIN)'

最佳答案

尝试使用MEMBER OF运算符

$qb
->select('a')
->from('MyBundle:Admin', 'a')
->where(':role NOT MEMBER OF ad.roles')->setParamete('role', 'ROLE_SUPER_ADMIN');

更新。 找到的唯一解决方案是使用 LIKE 检查数据库中的序列化字符串。 Details here

关于php - 如何在dql中搜索实体数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17915864/

相关文章:

php - 我可以使用 ajax 选择 mysqli 数据库行吗?

php - SF3 [翻译][控制台] 翻译 :update yaml nesting

SQL GROUP BY 项目,价格递增

php - 如何使用空字符串值将实体保存在数据库中

php - 使用 Doctrine 在 Symfony2 中进行非常低效的 DQL 查询。需要改进

mysql - 在 DQL 中的另一个 SELECT 查询中实现 SELECT 查询(Doctrine)

php - 如何使用 Guzzle 6 记录所有 API 调用

php - laravel访问原生php脚本

php - Laravel - 在 API 中访问 session 变量

php - Doctrine在使用单表继承时无法生成模式?