【发布时间】:2014-09-24 20:58:03
【问题描述】:
我对 Laravel 4 和 Elqouent 有疑问。我的模型实现了以下关系:
用户belongsToMany角色
角色 belongsToMany 用户
我想查询角色并想获得与他们相关的用户的数量。
当我执行以下操作时,我遇到了 N+1 问题:
$role = Role::has('users')->get()->each(function($role) {
$role->user_count = $role->users()->count();
});
有什么我没有想到的吗?
【问题讨论】:
-
结合 with() 和 has()。仅供参考,如果您只使用 with() 您将获得包含没有角色的用户的结果。 laravel.com/docs/eloquent#eager-loading
-
然后我必须对应用层进行实际计数?我想将计数留给数据库,因为我不需要传输所有用户。我正在寻找一种方法来注入一个从数据库填充的新变量
user_count。 -
查看查询生成器中
addSelect()的文档,它允许您向查询添加其他属性,并且您可以将其与join()结合使用以包含user_count属性