#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» также известно как ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ. Согласно документации, вы не можете этого сделать с помощью построителя запросов
Только ВНУТРЕННИЙ, ЛЕВЫЙ, ПРАВЫЙ.
Вам просто нужен собственный запрос:
$connection = $em->getConnection();
$statement = $connection->prepare("
select t1.id, t2.id from table1 t1 join table2 t2
");
$statement->execute();
$results = $statement->fetchAll();
или еще немного подумать о том, что вы действительно хотите получить