Doctrine 2其中存在两个关联查询

时间:2013-07-29 10:45:09

标签: sql doctrine-orm

我有两个相关的实体,我需要一个查询来检查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;
}

1 个答案:

答案 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)