0

我有三個表/實體的一個結構:User(表users;列idname),Room(表roome;列idnumber),和RoomUseruser_room;列iduser_idroom_id)。如何在Doctrine中使用WHERE作爲JOINed表的外鍵?

現在我想檢索所有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 OFdocs)爲:

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