Symfony2中同一个表的两个外键

时间:2016-01-07 16:05:45

标签: symfony doctrine-orm query-builder

如果我们有两个外键,那么如何创建一个像这样的SQL的QueryBuilder:

SELECT * 
FROM mappaths m
JOIN unitids n ON (m.ref_unitids2 = n.id OR m.ref_unitids1 = n.id)
WHERE m.id = 2

为此我设计像这个QueryBuilder,但我不认为它是正确的:

$query = $qb->select('m')
    ->from('ApiMapBundle:Mappaths','m')
    ->innerJoin('m.refUnitids1','u')
    ->innerJoin('m.refUnitids2','v')   
    ->where('m.id=:test')
    ->setParameter('test',1)
    ->getQuery()
    ->getResult()
;

$users = $reposity->getResult();
return $users;

$dql = $qb->getDql();
echo $dql;
$result = $query->getResult();
echo $result;

任何想法如何使用QueryBuilder解决上述查询?

1 个答案:

答案 0 :(得分:0)

您的示例不起作用,因为必须实现两个innerJoins才能返回一行。

这样的事可能有用(我没有测试过):

$query = $qb->select('m')
    ->from('ApiMapBundle:Mappaths','m')
    ->join('YourBundle:YourOtherEntity', 'u', 'WITH', $qb->expr()->orX('m.refUnitids1 = u.id','m.refUnitids2 = u.id'))
    ->where('m.id=:test')
    ->setParameter('test',1)
    ->getQuery()
    ->getResult()
;