Symfony2 / Doctrine:具有 OneToMany 基数的 findBy
Symfony2 / Doctrine : findBy with OneToMany cardinality
如果可能(以及如何)使用 OneToMany 关系基数作为 findBy 过滤器,我想。
例如,假设我有两个实体 User
和 Post
,它们之间存在 OneToMany 关系,因此用户拥有 post 的集合。
我正在寻找一种方法来获取至少拥有一个 post 的所有用户,也就是说:
|user.posts| >= 1
或更多编程方式 count(user->getPosts()) >= 1
我知道这可以通过 QueryBuilder 或 DQL 来实现,但我很确定有一个技巧可以让它与 findBy
.
一起工作
这是我愿意做的事情的想法:
class UserRepository extends EntityRepository
{
public function myQuery()
{
return $this->findBy(
array(... 'posts' ...), // What should I put here ?
array('email' => 'ASC')
);
}
}
评论里的人完全正确,所以我总结一下:
findBy
不适用于 OneToMany
,特别是因为您想按相关实体的数量查找。
这意味着你必须使用 QueryBuilder
.
在您的 UserRepository
中,使用以下内容:
$qb = $this->createQueryBuilder('users')
->leftJoin('user.posts', 'posts')
->addGroupBy('users')
->having('COUNT(posts) >= :limit')
->setParameter('limit', 1);
- 由于在您的用例中,您想要 select 的
Posts
的限制是 1,正如@Yoshi 所说,您可以使用 INNER JOIN
而不是 GROUP BY
+ HAVING
,这将自动取消 select Users
而没有 Post
.
代替上面的,使用这个:
$qb = $this->createQueryBuilder('users')
->innerJoin('user.posts', 'posts');
如果可能(以及如何)使用 OneToMany 关系基数作为 findBy 过滤器,我想。
例如,假设我有两个实体 User
和 Post
,它们之间存在 OneToMany 关系,因此用户拥有 post 的集合。
我正在寻找一种方法来获取至少拥有一个 post 的所有用户,也就是说:
|user.posts| >= 1
或更多编程方式 count(user->getPosts()) >= 1
我知道这可以通过 QueryBuilder 或 DQL 来实现,但我很确定有一个技巧可以让它与 findBy
.
这是我愿意做的事情的想法:
class UserRepository extends EntityRepository
{
public function myQuery()
{
return $this->findBy(
array(... 'posts' ...), // What should I put here ?
array('email' => 'ASC')
);
}
}
评论里的人完全正确,所以我总结一下:
findBy
不适用于OneToMany
,特别是因为您想按相关实体的数量查找。这意味着你必须使用
QueryBuilder
.
在您的 UserRepository
中,使用以下内容:
$qb = $this->createQueryBuilder('users')
->leftJoin('user.posts', 'posts')
->addGroupBy('users')
->having('COUNT(posts) >= :limit')
->setParameter('limit', 1);
- 由于在您的用例中,您想要 select 的
Posts
的限制是 1,正如@Yoshi 所说,您可以使用INNER JOIN
而不是GROUP BY
+HAVING
,这将自动取消 selectUsers
而没有Post
.
代替上面的,使用这个:
$qb = $this->createQueryBuilder('users')
->innerJoin('user.posts', 'posts');