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

Posted

技术标签:

【中文标题】如何在 Doctrine 中使用 WHERE 作为 JOINed 表的外键?【英文标题】:How to use WHERE for foreign key of a JOINed table in Doctrine? 【发布时间】:2017-01-30 14:12:34 【问题描述】:

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

现在我想用给定的id 检索User 的所有Rooms。 不加入Rooms怎么办?

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

【问题讨论】:

【参考方案1】:

您可以为此使用MEMBER OF (docs):

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

【讨论】:

以上是关于如何在 Doctrine 中使用 WHERE 作为 JOINed 表的外键?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP Doctrine ORM 的复杂 WHERE 子句

Doctrine 2 WHERE IN 子句使用实体集合

如何在 Doctrine 中使用 andWhere 和 orWhere?

Doctrine2 查询(Builder)在使用“where”和“in”子句后失去关系

在 Doctrine 2 中执行 WHERE .. IN 子查询

在 Doctrine 中使用继承时查询派生类型的属性