Я пытаюсь (без успеха) перевести этот SQL запрос в построитель запросов Doctrine2. Как мне сделать, чтобы включить вложенный выбор внутри Где с Querybuilder?
SQL запрос, который я пытаюсь реализовать с помощью querybuilder:
SELECT * FROM `message` A
WHERE A.id =
(SELECT B.id FROM `message` B
WHERE (A.user_id = B.user_id AND A.receiver_id = B.receiver_id) OR (A.user_id = B.receiver_id AND A.receiver_id = B.user_id)
ORDER BY creationdate DESC
LIMIT 1)
До сих пор я пытался что-то подобное в Репозиторий сообщений, но я думаю, что я далек от хорошего способа сделать это:
public function getConversations()
{
$qb = $this
->createQueryBuilder('A')
->Where('A.id IN
(SELECT B.id FROM Message B
WHERE (A.user_id = B.user_id AND A.receiver_id = B.receiver_id) OR (A.user_id = B.receiver_id AND A.receiver_id = B.user_id)
ORDER BY creationdate DESC
LIMIT 1')
;
return $qb
->getQuery()
->getResult()
;
}
}
Это сообщение об ошибке триггера:
Ошибка: класс «Сообщение» не определен.
РЕДАКТИРОВАТЬ: Для заинтересованных людей, я наконец-то нашел решение. Я сделал запрос следующим образом (если у кого-то есть другое решение, я очень заинтересован):
public function getConversations()
{
$rawSql = "SELECT * FROM `message` A
WHERE A.id =
(SELECT B.id FROM `message` B
WHERE (A.user_id = B.user_id AND A.receiver_id = B.receiver_id) OR (A.user_id = B.receiver_id AND A.receiver_id = B.user_id)
ORDER BY creationdate DESC
LIMIT 1)
";
$stmt = $this->getEntityManager()->getConnection()->prepare($rawSql);
$stmt->execute([]);
return $stmt->fetchAll();
}