все! Что мне делать, если мне нужно сделать выбор из таблицы соединений?
Например, я разрабатываю проект и мне нужно делать чаты между пользователями. У меня есть две сущности: User
и Chat
, и отношение многих ко многим между ними (соответственно, у меня есть три таблицы: user, chat, chat_user
). Я пытаюсь получить все чаты, пользователь которых является участником, и всех пользователей из этих чатов.
Я сделал следующий запрос SQL:
SELECT *
FROM chat c
INNER JOIN chat_user cu ON c.id = cu.chat_id
INNER JOIN user u ON u.id = cu.user_id
WHERE c.id IN (SELECT chat_id
FROM chat_user
WHERE user_id = <idUser>);
Но я не знаю, как переводить в подзапросе DQL SELECT chat_id FROM chat_user WHERE user_id = <idUser>
, потому что нет дополнительной сущности для таблицы chat_user.
И я попытался добавить сущность ChatUser и получить данные в ChatRepository smt. как это:
public function getChatsData($idUser)
{
$subQuery = $this->getEntityManager()
->getRepository(ChatUser::class)
->createQueryBuilder('chus')
->select('chus.chat')
->andWhere('chus.user = :idUser')
->setParameter('idUser', $idUser)
;
$qb = $this->createQueryBuilder('c');
return $qb
->innerJoin('c.chatUsers', 'cu')
->addSelect('cu')
->innerJoin('cu.user', 'u')
->addSelect('u')
->innerJoin('c.messages', 'm')
->addSelect('m')
->andWhere('u.id = :idUser')
->andWhere($qb->expr()->in(
'c.id',
$subQuery->getDQL()
))
->setParameter('idUser', $idUser)
->getQuery()
->getResult()
;
}
но это не работает. Я получаю сообщение об ошибке [Semantical Error] line 0, col 12 near 'chat FROM App\Entity\ChatUser': Error: Invalid PathExpression. Must be a StateFieldPathExpression.
Есть ли Doctrine стандартные инструменты для таких задач?