首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行查询时发生异常: SQLSTATE[42883]:未定义函数:7错误:操作符不存在: json

执行查询时发生异常: SQLSTATE[42883]:未定义函数:7错误:操作符不存在: json
EN

Stack Overflow用户
提问于 2022-02-11 18:00:24
回答 2查看 375关注 0票数 0

我在使用PostgreSQL和Symfony。

我有一个用户表,如下所示:

代码语言:javascript
复制
id | email         | roles
---------------------------------------
1  | abc@gmail.com | ["ROLE_IVM_USER"]

角色列是JSON类型,如上面所示。

我希望获得具有ROLE_IVM_USER角色的用户列表,使用下面的代码:

代码语言:javascript
复制
$queryBuilder
            ->andWhere(sprintf('%s.roles IN (:roles)', $rootAlias))
            ->setParameter('roles', [User::ROLE_IVM_USER]);

这将导致以下错误:

代码语言:javascript
复制
An exception occurred while executing a query: SQLSTATE[42883]: Undefined function: 7 ERROR: operator does not exist: json = unknown\nLINE 1: ... u0_ WHERE u0_.organization_id = $1 AND u0_.roles IN ($2) OR...\n ^\nHINT: No operator matches the given name and argument types. You might need to add explicit type casts."

我是ROLE_IVM_USER的新手,让我知道如何让用户扮演的角色

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-14 06:57:36

下面是我如何在不使用任何第三方库的情况下实现所需的结果:

代码语言:javascript
复制
$rsm = $this->createResultSetMappingBuilder('u');

        $rawQuery = sprintf(
            'SELECT %s
                    FROM public.user u
                    WHERE u.roles::jsonb ?? :role',
            $rsm->generateSelectClause()
        );

        $query = $this->getEntityManager()->createNativeQuery($rawQuery, $rsm);
        $query->setParameter('role', $role);
        return $query->getResult();

希望这能帮到别人,节省调查时间。

票数 0
EN

Stack Overflow用户

发布于 2022-02-11 18:21:44

您可以执行LIKE而不是IN

代码语言:javascript
复制
$queryBuilder
  ->andWhere(sprintf('%s.roles LIKE :roles', $rootAlias))
  ->setParameter('roles', '%' . User::ROLE_IVM_USER . '%');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71084573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档