我使用Symfony 3.2和Doctrine Query Builder。 我之间有ManyToMany关系 (用户<-> roles_users <->角色)
users(id), role_users(role_id,user_id)和 角色(编号,名称)。
,并且只想选择role.name ='role_client'的那些用户。如何使用查询生成器来做到这一点?
答案 0 :(得分:1)
您可以在用户存储库中创建类似的方法:
public function findByRole($roleName='role_client')
{
$query = $this->createQueryBuilder('u')
->select('u')
->leftJoin('u.role', 'r')
->addSelect('r');
$query = $query->where('r.name = :rolename')
->setParameter('rolename', $roleName)
->getQuery()
->getResult();
return $query;
}
但是请确保在实体之间正确地建立ORM,以便您可以轻松地将Role实体与User实体一起加入。
由于我不知道您在用户实体中如何称呼它,因此可能不得不更改'u.role'部分。
答案 1 :(得分:0)
Doctrine允许您对数据库进行抽象。您不应该考虑数据库表,而应该考虑实体:您的用户实体应该具有$ roles(或者也许是diffrenet名称)属性,这样您就可以像这样在您的queryBuilder中使用它:
public function findByRoleName(string $roleName)
{
return $this
->createQueryBuilder('u')
// add this to also load the related roles entities
->addSelect('r')
// Where roles is your property name in the User entity
->leftJoin('u.roles', 'r')
->where('r.name = :roleName')
->setParameter('roleName', $roleName)
->getQuery()
->getResult();
}
我对User实体的属性$ roles进行了连接:连接表(这里是role_users)是完全透明的!