向后加入Doctrine2

时间:2015-02-20 16:00:55

标签: php mysql symfony doctrine-orm dql

假设我有2个实体。 FirstEntity对第二个实体一无所知。 第二个实体有srcFisrt和dstFirst链接到第一个实体。 问题是:如何在doctrine中编写查询以从第一个实体加入第二个?

例如:

    $em = $this->getEntityManager();

    $qb = $em->createQueryBuilder();
    $qb->select(array('second', 'src_first', 'dst_first'))
        ->from('TestOrm:SecondEntity', 'second')
        ->innerJoin('second.srcFirst', 'src_first')
        ->innerJoin('second.dstFirst', 'src_first');

工作很好,但我怎么写这样的东西?:

    $em = $this->getEntityManager();

    $qb = $em->createQueryBuilder();
    $qb->select(array('first'))
        ->from('TestOrm:FirstEntity', 'first');
    if($isDstSection) {
        $qb->innerJoin('TestOrm:SecondEntity', 'second', ON, second.dstFirst = first);
    } else {
        $qb->innerJoin('TestOrm:SecondEntity', 'second', ON, second.srcFirst = first);
    }
    $qb->andWhere('second.isVisibleForExample', '1');

我知道,这个学说不能回归“第二”实体,因为firstEntity没有链接到第二个实体。我只需要通过第二次过滤firstEntity

1 个答案:

答案 0 :(得分:0)

我觉得这样的事情可能有用:

if($isDstSection) {
    $qb->innerJoin('TestOrm:SecondEntity', 'second', Join::WITH, 'second.dstFirst = first');
} else {
    $qb->innerJoin('TestOrm:SecondEntity', 'second', Join::WITH, 'second.srcFirst = first');
}
$qb->andWhere('second.isVisibleForExample = :visibility')
   ->setParameter('visibility', 1);