我有两个相关的实体,我需要一个查询来检查entityOne是否有两个不同的关系(额外列为diff字段)到entityTwo。
一个简单的“WHERE entityTwo.diff_field = 1 AND entityTwo.diff_field = 2”不起作用。
我怎么能做到这一点?
由于
更新
$query = $this->createQueryBuilder('one');
$query->addSelect('two')->leftJoin('one.two', 'two');
$query->where('two.id = :a')->setParameter('a',1);
$query->andWhere('two.id = :b')->setParameter('b',2);
EntityOne
class EntityOne {
/**
* @ORM\Id
* @ORM\Column(type="integer", nullable=false);
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="EntityTwo", mappedBy="one")
*/
protected $two;
}
EntityTwo
class EntityTwo {
/**
* @ORM\Id
* @ORM\Column(type="integer", nullable=false);
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="EntityOne", inversedBy="two", cascade={"persist"})
* @ORM\JoinTable(name="one_two_xref")
*/
protected $one;
}
答案 0 :(得分:0)
我认为你需要两个EXISTS子查询。
您希望(我认为)选择具有的entityOnes 一个链接的实体,两个是diffType 1,另一个是一个链接的实体,它有一个difftype 2。
如果您在本文档中向下滚动到“带有相关子查询的WHERE子句中的EXISTS”:
http://docs.doctrine-project.org/en/2.1/reference/dql-doctrine-query-language.html
我认为您需要的是类似的查询,但有两个单独的EXISTS子查询,如:
WHERE EXISTS (SELECT EntityTwo ... DiffType = 1)
AND EXISTS (SELECT EntityTwo ... DiffType = 2)