У меня есть этот запрос в SQL, который работает нормально:
SELECT tl.*
FROM table1 tl
INNER JOIN table2 tl2
ON tl.id = tl2.other_id
INNER JOIN
(
SELECT other_id, MAX(date) maxDATE
FROM table2
GROUP BY other_id
)
tlv2 ON tl2.other_id = tlv2.other_id AND
tl2.date = tlv2.maxDATE WHERE tl.access=0
ORDER BY tlv2.maxDATE DESC
Теперь проблема в том, что я, кажется, не могу понять, как перевести это в построитель запросов Doctrine.
У меня есть это:
$subquery = $this->getEntityManager()->getRepository(Table2::class)
->createQueryBuilder('tl2')
->select(array('other_id','MAX(date) maxDate'))
->groupBy('other_id')
->getDQL();
$qb = $this->createQueryBuilder('tl');
$qb->select('tl')
->innerJoin(Table2::class,'tl2','WITH','tl.id = tl2.other_id')
->innerJoin("(".$subquery.")",'tlv2','WITH','tl2.date = tlv2.maxDATE')
->where('tl.access = 0')
->orderBy('tlv2.maxDATE','DESC');
но это дает мне ошибку:
Subquery is not supported here
В строке, где я поставил переменную $subquery.
Кажется, я не могу понять, что я здесь делаю не так. Что я делаю неправильно?






как упоминалось здесь, если вы используете ORM, тогда сопоставление не удастся, вы можете запустить это только без гидратации, если вы используете DBAL, только это буду работать, как вы ожидаете
Если вы выберете собственное решение для запросов и по-прежнему нуждаетесь в сопоставленном результате, вы можете использовать \Doctrine\ORM\EntityManager::createNativeQuery с \Doctrine\ORM\Query\ResultSetMapping.
$sql = <<<SQL
SELECT tl.*
FROM table1 tl
INNER JOIN table2 tl2
ON tl.id = tl2.other_id
INNER JOIN
(
SELECT other_id, MAX(date) maxDATE
FROM table2
GROUP BY other_id
)
tlv2 ON tl2.other_id = tlv2.other_id AND
tl2.date = tlv2.maxDATE WHERE tl.access=0
ORDER BY tlv2.maxDATE DESC
SQL;
$rsm = new Query\ResultSetMapping();
$rsm->addEntityResult(Entity::class, 'e');
$rsm->addFieldResult('e','id', 'id');
$rsm->addFieldResult('e','date', 'createAt');
$result = $this->entityManager->createNativeQuery($sql, $rsm)->getResult();