2015-10-13 3 views
1

Я пытаюсь использовать построитель запросов для объединения двух таблиц, которые не имеют отношения.Symfony 2 query builder join without relation (cross join)

Желаемый конечный результат:

SELECT x, y 
FROM x 
JOIN y 

код запроса строитель:

$qb = $this->getEntityManager()->createQueryBuilder(); 
$qb->select('x'); 
$qb->from('Test1', 'x'); 
$qb->join('Test2', 'y'); 
$qb->orderBy('x.name', 'ASC'); 

Производит следующие DQL:

SELECT x FROM Test1 x INNER JOIN Test2 y ORDER BY x.name ASC

что приводит к синтаксической ошибке:

[Syntax Error] line 0, col 137: Error: Expected Literal, got 'BY'

Сущности Test1 и Test2 не имеют отношения (не в коде, так и в базе данных).

Есть ли способ сделать это? Я хотел бы использовать построитель запросов, потому что у меня есть много других функций для запроса, который зависит от построителя запросов (для фильтрации и сортировки и т. Д.).

Я знаю, что это возможно при использовании простых SQL или DQL-запросов (не созданных построителем запросов).

ответ

2

Вы можете попробовать следующие возможности:

public function getYourData($users) { 
    $qb = $this->entityManager->createQueryBuilder(); 
    $qb 
     ->select('x', 'y') 
     ->from('Test1', 'x') 
     ->leftJoin(
      'Test2', 
      'y', 
      \Doctrine\ORM\Query\Expr\Join::WITH, 
      'x.id = y.reference_id' 
     ) 
     ->orderBy('x.name', 'ASC'); 

    return $qb->getQuery()->getResult(); 
} 
+0

Но нет никакого отношения. Итак, x не относится к y –

+0

Не понимаю, почему вы хотите отсортировать абсолютно 2 разных таблицы как один? Это очень плохая практика проектирования. –

+0

Это именно то, что я хочу. У меня есть таблица с доменами и таблица с параметрами. Я хочу, чтобы набор результатов со списком всех параметров для всех доменов. –