Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine orm 仅通过查询生成器选择关联实体_Doctrine Orm_Query Builder - Fatal编程技术网

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谢谢,我已经更新了问题并发布了错误。