Doctrine DQL,使用带有实体的IN语句

时间:2016-11-08 11:11:13

标签: php orm doctrine-orm dql

是否可以在Doctrine中使用IN语句并将实体列表作为IN语句的参数传递?

例如,具有以下关系:

/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\OneToMany(targetEntity="Calendar", mappedBy="education", cascade={"persist"})
 */
private $calendar;

我想进行如下查询:

 SELECT p FROM Education p WHERE p.calendar IN (:calendar)

as:calendar参数是一个实体数组。

$query->setParameter('calendar', array($singleEntity,$singleEntity2));

但是这会产生以下错误:

near 'calendar IN (:calendar)': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField 

1 个答案:

答案 0 :(得分:1)

您可以将完整实体用于IN语句,DQL将类似于

$query->select('p')
  ->from('Education', 'p')
  ->where($query->expr()->in('p.calendar', ':values'))
  ->setParameter('values',  array($singleEntity,$singleEntity2));

如果我没记错的话,我已经使用过很多次了,而且它总能奏效。我通常使用JOIN和Cerad建议的属性,但这也应该有用。