使用 Doctrine 从数据库中获取 Json 的问题

Posted

技术标签:

【中文标题】使用 Doctrine 从数据库中获取 Json 的问题【英文标题】:problem to fetch Json from database with Doctrine 【发布时间】:2021-07-25 14:59:03 【问题描述】:

我使用 symfony 5 并在我的数据库中创建了一个 "user" 表,而我的 "user" 表有 "roles" 列。

"roles" 列是 json。

我在我的控制器中使用它来查找所有拥有"roles" = ["ROLE_USER"] 的用户:

public function usersList(EntityManagerInterface $em): Response

    $lists = $em->createQueryBuilder()
        ->select('user')
        ->where('user.roles = ["ROLE_USER"]')
        ->getQuery()
        ->execute();

    return $this->render('list.html.twig',[
        'lists' => $lists
    ]);

但是告诉我这个错误:

[语法错误] 第 0 行,第 12 列:错误:预期 Doctrine\ORM\Query\Lexer::T_FROM,得到 'WHERE'

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

错误消息显示 Expected Doctrine\ORM\Query\Lexer::T_FROM 这意味着您需要将 FROM 添加到查询中。它与角色无关。

$lists = $em->createQueryBuilder()
    ->select('user')
    ->from(User::class, 'user')
    ->where('user.roles = ["ROLE_USER"]')
    ->getQuery()
    ->execute();

【讨论】:

谢谢,但显示错误:[Syntax Error] line 0, col 57: Error: Expected Literal, got '[' 'user.roles = ["ROLE_USER"]' 无效。试试 'user.roles = "["ROLE_USER"]"' 或 'u.roles LIKE "%ROLE_USER%"' phpmyadmin 一起检查数据库中角色的真正价值。 'user.roles = "["ROLE_USER"]"''u.roles LIKE "%ROLE_USER%"' 不起作用并显示相同的错误 在我的数据库集中["ROLE_USER"]【参考方案2】:

您可以使用它从数据库中获取数据:

public function usersList(EntityManagerInterface $em): Response

        $roles = 'ROLE_USER';
        $lists = $em->createQueryBuilder('u')
            ->select('u')
            ->from(User::class, 'u')
            ->where('u.roles LIKE :roles')
            ->setParameter('roles', '%"'.$roles.'"%')
            ->getQuery()
            ->getResult();

    return $this->render('list.html.twig',[
        'lists' => $lists
    ]);

【讨论】:

以上是关于使用 Doctrine 从数据库中获取 Json 的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Doctrine Fixture 参考中获取实体?

如何使用 Symfony 2.1 从内部控制器获取 Doctrine 实体的实体管理器

从doctrine2中的代理对象获取“true”对象

Symfony,Doctrine 在存储到数据库之前截断 Json 中的字符串

使用 Doctrine ORM 如何从自己的表中获取一个表来存储记录?

Symfony Doctrine ORM ManyToMany - 带有标签的博客 - 我没有从博客中获取所有标签,没有延迟加载