如何使用 Doctrine 创建内部连接?
How to create an inner join with Doctrine?
我的数据库中有 3 个表:
- 协会
- id
- 标题
- 用户
- id
- 名字
- association_users
- id
- id_users
- id_associations
我想在 SQL 上执行此查询:
SELECT a.id, a.title, u.id, u.name
FROM association AS a
INNER JOIN association_user AS au
ON au.association_id = a.id
INNER JOIN user AS u
ON u.id = au.user_id
WHERE au.user_id = ID
目前,我有这个:
return $this->createQueryBuilder('a')
->join('association.users', 'u')
->addSelect('a')
->join('user.id', 'u.id')
->addSelect('u')
->where("au.user_id = :id")
->setParameter('id', $userid)
->getQuery()
->getResult()
;
但它不起作用:
[Semantical Error] line 0, col 73 near '.users u INNER': Error: Identification Variable association used in join path expression but was not defined before.
我的查询生成器出了什么问题?
工作代码
我已将查询更改为:
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('a')
->innerJoin('a.users','u')
->where('u.id = :id')->setParameter('id', $this->getUser()->getId());
},
如果您的实体映射正确,则查询生成器将自动加入映射中指定的列,您无需在此处再次指定它们:
$qb->select("a,u")
->from('MyBundle\Association','a')
->innerJoin('a.users','u')
->where('u.id = :id')
->setParameter('id',$userid);
我的数据库中有 3 个表:
- 协会
- id
- 标题
- 用户
- id
- 名字
- association_users
- id
- id_users
- id_associations
我想在 SQL 上执行此查询:
SELECT a.id, a.title, u.id, u.name
FROM association AS a
INNER JOIN association_user AS au
ON au.association_id = a.id
INNER JOIN user AS u
ON u.id = au.user_id
WHERE au.user_id = ID
目前,我有这个:
return $this->createQueryBuilder('a')
->join('association.users', 'u')
->addSelect('a')
->join('user.id', 'u.id')
->addSelect('u')
->where("au.user_id = :id")
->setParameter('id', $userid)
->getQuery()
->getResult()
;
但它不起作用:
[Semantical Error] line 0, col 73 near '.users u INNER': Error: Identification Variable association used in join path expression but was not defined before.
我的查询生成器出了什么问题?
工作代码
我已将查询更改为:
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('a')
->innerJoin('a.users','u')
->where('u.id = :id')->setParameter('id', $this->getUser()->getId());
},
如果您的实体映射正确,则查询生成器将自动加入映射中指定的列,您无需在此处再次指定它们:
$qb->select("a,u")
->from('MyBundle\Association','a')
->innerJoin('a.users','u')
->where('u.id = :id')
->setParameter('id',$userid);