如何在 Doctrine 中使用 WHERE 作为 JOINed 表的外键



我有三个表/实体的结构:User(表users;列idname),Room(表roome;列idnumber)和RoomUseruser_room;列iduser_idroom_id)。

现在我想检索具有给定idUser的所有Room如何在不加入Room的情况下做到这一点?

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

您可以使用

MEMBER OF(文档)来实现:

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

相关内容

  • 没有找到相关文章

最新更新