ibi*_*tux 1 php one-to-many symfony doctrine-orm
我想如果可能(以及如何)使用 OneToMany 关系基数作为 findBy 过滤器。
例如在这里,假设我有两个实体,User并且Post它们之间存在 OneToMany 关系,以便用户拥有一组帖子。
我正在寻找一种方法来获取至少有一个帖子的所有用户,也就是说:
|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')
);
}
}
Run Code Online (Sandbox Code Playgroud)
评论里的人说得很对,所以我总结一下:
findBy不适用于 a OneToMany,特别是因为您想按相关实体的数量查找。
这意味着您必须使用QueryBuilder.
在您的 中UserRepository,使用以下内容:
$qb = $this->createQueryBuilder('users')
->leftJoin('user.posts', 'posts')
->addGroupBy('users')
->having('COUNT(posts) >= :limit')
->setParameter('limit', 1);
Run Code Online (Sandbox Code Playgroud)
Posts您要选择的限制为 1,正如@Yoshi 所说,您可以使用INNER JOIN而不是GROUP BY+ HAVING,这将自动取消选择Usersno Post。而不是上面的,使用这个:
$qb = $this->createQueryBuilder('users')
->innerJoin('user.posts', 'posts');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2346 次 |
| 最近记录: |