0

У меня есть структура из трех таблиц/сущностей: User (таблица users; столбцы id и name), Room (таблица roome; столбцы id и number) и RoomUser (user_room; столбцы id, user_id, room_id).Как использовать WHERE для внешнего ключа таблицы JOINed в Doctrine?

Теперь я хочу получить все Room s для User с данным id. Как это сделать без участия Room s?

$userId = 123; 
// ... 
$queryBuilder = $this->entityManager->createQueryBuilder(); 
$query = $queryBuilder->select('r') 
    ->from(Room::class, 'r') 
    ->join('r.RoomUsers', 'ru') 
    ->where('ru.room_id = :userId') // room_id? ru.Room.id? 
    ->setParameter('userId', $userId) 
    ->getQuery(); 

$rooms = $query->getResult(Query::HYDRATE_OBJECT); 

Таким образом, в SQL было бы что-то вроде

SELECT * 
FROM rooms 
JOIN room_users ON room_users.room_id = rooms.id 
WHERE user_id = 123; 

Как реализовать этот простой запрос с QueryBuilder?

+0

ли мой ответ вам помог? Если да, примите мой ответ. Если нет, сообщите мне (и сообществу). –

ответ

0

Вы можете использовать MEMBER OF (docs) для этого:

$query = $queryBuilder->select('r') 
    ->from(Room::class, 'r') 
    ->where(':user_id MEMBER OF r.users') 
    ->setParameter('user_id', $userId)