如何在 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
;列id
和name
)、Room
(表roome
;列id
和number
)和RoomUser
(user_room
;列id
、user_id
、room_id
)。
现在我想用给定的id
检索User
的所有Room
s。 不加入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
实现这个简单的请求?
【问题讨论】:
【参考方案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 中使用 andWhere 和 orWhere?
Doctrine2 查询(Builder)在使用“where”和“in”子句后失去关系