我正在尝试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 = :人
答案 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()