使用 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 的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Symfony 2.1 从内部控制器获取 Doctrine 实体的实体管理器
Symfony,Doctrine 在存储到数据库之前截断 Json 中的字符串
使用 Doctrine ORM 如何从自己的表中获取一个表来存储记录?
Symfony Doctrine ORM ManyToMany - 带有标签的博客 - 我没有从博客中获取所有标签,没有延迟加载