2016-10-08 2 views
1

В простой SQL я хотел бы сделать этодоктрина DBAL присоединиться без пункта о

select t1.id, t2.id from table1 t1 join table2 t2; 

Ho вы бы достичь такой же, используя учение DBAL QueryBuilder

$qb = $this->_em->getConnection()->createQueryBuilder() 

$qb->select('t1.id, t2.id') 
    ->from('table1','t1') 
    ->join('t1', 'table2', 't2') //without on clause, this doesn't work 
    ->execute() 
    ->fetchAll(); 

ответ

1

Попробуйте

$qb->select('t1.id', 't2.id') 
    ->from('table1','t1') 
    ->join('t1', 'table2', 't2', true) 
    ->execute() 
    ->fetchAll(); 
+0

Не работает он добавляет на пункте в конце без условия, что приводит в синтаксической ошибке, попробовали уже – reverbnation

+0

Вы правы, просто добавьте истинное условие :) Я обновил свой ответ –

1

JOIN без выражения "ON" также известен как CROSS JOIN. Согласно документации и не может сделать это с помощью конструктора запросов

http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/query-builder.html#join-clauses

только INNER, влево, вправо.

U просто нужно родной запрос:

$connection = $em->getConnection(); 

$statement = $connection->prepare(" 
    select t1.id, t2.id from table1 t1 join table2 t2 
"); 

$statement->execute(); 

$results = $statement->fetchAll(); 

или думать немного больше о том, что на самом деле вы хотите получить