Doctrine DBAL join без предложения ON

#php #mysql #symfony #doctrine-orm #doctrine

#php #mysql #symfony #doctrine-orm #доктрина

Вопрос:

В обычном SQL я бы сделал это

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

Как бы вы добились того же, используя doctrine 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();
  

Комментарии:

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

2. Вы правы, просто добавьте условие true 🙂 Я обновил свой ответ

Ответ №2:

Соединение без выражения «ON» также известно как ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ. Согласно документации, вы не можете этого сделать с помощью построителя запросов

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

Только ВНУТРЕННИЙ, ЛЕВЫЙ, ПРАВЫЙ.

Вам просто нужен собственный запрос:

 $connection = $em->getConnection();

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

$statement->execute();

$results = $statement->fetchAll();
  

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