这种关于多对多关系的学问查询有什么问题

时间:2019-06-30 03:35:22

标签: symfony doctrine

我正在尝试Symfony 4,但无法正确查询此查询。同样的事情在Symfony 3中也可以。我有2个实体。一个是一个人,另一个是一天。关系是ManyToMany。我想为一个特定的人度过一整天

我尝试使用MEMBER OF和联接表,但是在此示例中没有任何作用。

//日实体

/**
 * @ORM\ManyToMany(targetEntity="App\Entity\Person", inversedBy="days")
 */
private $person;

//人员实体

/**
 * @ORM\ManyToMany(targetEntity="App\Entity\Day", mappedBy="person")
 */
private $days;

//存储库功能

return $this->createQueryBuilder('d')
        ->andWhere('d.person = :person')
        ->setParameter('person', $person)
        ->getQuery()
        ->getResult()
    ;

这是我得到的错误:

  

在QueryException.php 65行中:[语义错误] 0行,col 58在附近   '人=:pe':错误:无效的PathExpression。   应该是StateFieldPathExpression或SingleValuedAssociationField。

在QueryException.php第43行中:

  

从App \ Entity \ Day d中选择d d.date =:date AND d.person =   :人

2 个答案:

答案 0 :(得分:2)

我想这个问题与Symfony版本无关,而与orm版本有关

因此您可以使用IDENTITY尝试

return $this->createQueryBuilder('d')
    ->andWhere('IDENTITY(d.person) = :person')
    ->setParameter('person', $person)
    ->getQuery()
    ->getResult()
;

return $this->createQueryBuilder('d')
    ->leftJoin('d.person', 'p')
    ->andWhere('p.id = :person')
    ->setParameter('person', $person)
    ->getQuery()
    ->getResult()
;

答案 1 :(得分:0)

您可以从关联中获得与人相关的日期,例如$ person-> getDays()