2016-01-07 8 views
1

Если бы два внешних ключей, то как бы создать QueryBuilder как этот SQL:Два внешних ключей к той же одной таблице в Symfony2

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?

ответ

0

Ваш пример не будет работать, так как оба внутренних интерфейса должны быть реализованы для возврата строки.

Нечто подобное может работать (я не проверял это):

$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() 
; 
+0

джейсон .. одна проблема у меня есть здесь с этим запросом, например, если я прошу для table1 (идентичности, a1, b1) table2 (identitiy, forign_a1, forign_a1) с таблицей данных2 (1,2,3), поэтому она дает мне значения последовательности 2,3, а в некоторых случаях она дает 3,2. если они сначала найдут второй ключ foriegn, тогда он даст мне альтернативный путь. любая идея, как решить эту проблему ... lookforward для вашей помощи? – zahid

Смежные вопросы