Doctrine orm 仅通过查询生成器选择关联实体
考虑一下原则中查询生成器的以下表达式Doctrine orm 仅通过查询生成器选择关联实体,doctrine-orm,query-builder,Doctrine Orm,Query Builder,考虑一下原则中查询生成器的以下表达式 # fail $em->createQueryBuilder()->select('m')->from('TbUsermanager','t') ->join('t.manager', 'm') ->where('t.user=:user') ->setParameter('user', 1) -
# fail
$em->createQueryBuilder()->select('m')->from('TbUsermanager','t')
->join('t.manager', 'm')
->where('t.user=:user')
->setParameter('user', 1)
->getQuery()
->getResult();
# success
$em->createQueryBuilder()->select('t')->from('TbUsermanager','t')
->join('t.manager', 'm')
->where('t.user=:user')
->setParameter('user', 1)
->getQuery()
->getResult();
对象TbUsermanager是TbUser和TbManager之间的关系表
它们的注释是
# user
* @ORM\ManyToOne(targetEntity="TbUser")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="ID")
* })
# manager
* @ORM\ManyToOne(targetEntity="TbManager")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="manager_id", referencedColumnName="ID")
* })
但是,为什么我不能只选择管理器对象?我该怎么做?我试过m.id,效果很好
更新:
在fail查询中,我希望它返回objecttbmanager的集合,但是,它抛出以下异常
PHP Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message 'SELECT m FROM TbUsermanager t INNER JOIN t.manager m WHERE t.user = 1' in C:\php_projects\zms_core\wcms\vendor\doctrine\orm\lib\Doctrine\ORM\Query\QueryException.php:41
如果我将select'm'更改为select'm.id',它将返回TbManager id的集合,工作正常。完整的错误消息将包含如下消息: 如果不选择至少一个根实体别名,则无法通过标识变量选择实体 这是因为条令要求您从查询所基于的主要实体中选择数据,在您的示例中,该实体是TbUsermanager 一种可能的解决方案是只更改要从中选择的实体:
SELECT m
FROM TbManager AS m
JOIN TbUsermanager AS t WITH t.manager = m
WHERE t.user = :user
WITH可用于限制join子句,以防您可以基于实体的属性生成联接,或提供联接条件。请提供更多信息。不起作用不是一个好的描述。你期待什么?发生了什么事?你收到了什么样的错误消息?@xabbuh谢谢,我已经更新了问题并发布了错误。