使用 PHP Doctrine ORM 加入 0..n / 0..n 关系链接的 2 个表
Join 2 tables linked by a 0..n / 0..n relation with PHP Doctrine ORM
我有 2 个 table:User
和 Series
。
还有一个table:User_Series
代表用户关注什么系列。由于此 table 仅表示关系 0..n --- 0..n
,因此未生成 class。
User table: Series table: User_Series table:
| id | ... | | id | ... | | user_id | series_id |
|---------|-----| |---------|-----| |---------|-----------|
| INT(11) | ... | | INT(11) | ... | | INT(11) | INT(11) |
如何创建一个 QueryBuilder 来检索用户关注的所有系列?
我试过但没有用的(所有系列都被退回):
$this->getDoctrine()
->getRepository(Series::class)
->createQueryBuilder('s')
->join(User::class, 'u')
->where('u = :user_id')
->setParameter('user_id', $user->getId())
->getQuery()
->execute();
tables A 和 B 之间的 0..n/0..n 关系由数据库中的另一个 table 表示。
但是,Doctrine 通过 B class 内的 A 数组和 A class.
内的 B 数组对其进行建模
因此,在加入时,必须使用该数组来完成。
// finds all series that a specific user follows:
$this->getDoctrine()
->getRepository(Series::class)
->createQueryBuilder('s')
->join('s.user', 'u') // using s.user instead of User::class
->where('u = :user_id')
->setParameter('user_id', $user->getId())
->getQuery()
->execute();
我有 2 个 table:User
和 Series
。
还有一个table:User_Series
代表用户关注什么系列。由于此 table 仅表示关系 0..n --- 0..n
,因此未生成 class。
User table: Series table: User_Series table:
| id | ... | | id | ... | | user_id | series_id |
|---------|-----| |---------|-----| |---------|-----------|
| INT(11) | ... | | INT(11) | ... | | INT(11) | INT(11) |
如何创建一个 QueryBuilder 来检索用户关注的所有系列?
我试过但没有用的(所有系列都被退回):
$this->getDoctrine()
->getRepository(Series::class)
->createQueryBuilder('s')
->join(User::class, 'u')
->where('u = :user_id')
->setParameter('user_id', $user->getId())
->getQuery()
->execute();
tables A 和 B 之间的 0..n/0..n 关系由数据库中的另一个 table 表示。 但是,Doctrine 通过 B class 内的 A 数组和 A class.
内的 B 数组对其进行建模因此,在加入时,必须使用该数组来完成。
// finds all series that a specific user follows:
$this->getDoctrine()
->getRepository(Series::class)
->createQueryBuilder('s')
->join('s.user', 'u') // using s.user instead of User::class
->where('u = :user_id')
->setParameter('user_id', $user->getId())
->getQuery()
->execute();