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)
我的回答对你有帮助吗?如果有,请接受我的回答。如果没有,请让我(和社区)知道。