Join 如何在原则中使用联接表外键的WHERE?

Join 如何在原则中使用联接表外键的WHERE?,join,doctrine-orm,associations,foreign-key-relationship,query-builder,Join,Doctrine Orm,Associations,Foreign Key Relationship,Query Builder,我有三个表/实体的结构:User(表users;列id和name),Room(表roome;列id和number),以及RoomUser(user\u-room;列id,user\u-id,room\u-id) 现在,我想为具有给定id的用户检索所有房间如何在不加入房间的情况下执行此操作? $userId = 123; // ... $queryBuilder = $this->entityManager->createQueryBuilder(); $query = $queryB

我有三个表/实体的结构:
User
(表
users
;列
id
name
),
Room
(表
roome
;列
id
number
),以及
RoomUser
user\u-room
;列
id
user\u-id
room\u-id

现在,我想为具有给定
id的
用户
检索所有
房间
如何在不加入
房间的情况下执行此操作?

$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
实现这个简单的请求?

您可以使用
成员来实现:

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

我的回答对你有帮助吗?如果有,请接受我的回答。如果没有,请让我(和社区)知道。