拉拉维尔雄辩地计算关系
我是laravel的新手,雄辩,我不确定这是否可能。但我有2张桌子,一对多关系。一个是“位置”,一个是“用户”。一个位置可以有多个用户。
因此,如果我想获得所有用户的所有位置,我会这样做:
Location::with("users")->get();
但我也想知道每个位置有多少用户,我尝试这样做
Location::with("users")->count("users")->get();
但这并没有奏效。
我是laravel的新手,雄辩,我不确定这是否可能。但我有2张桌子,一对多关系。一个是“位置”,一个是“用户”。一个位置可以有多个用户。
因此,如果我想获得所有用户的所有位置,我会这样做:
Location::with("users")->get();
但我也想知道每个位置有多少用户,我尝试这样做
Location::with("users")->count("users")->get();
但这并没有奏效。
如果使用预先加载,则不会发生提到的 n+1 问题。
$locations = Location::with('users')->get();
$locations->users()->count();
这应该会产生三个查询,无论您有多少用户或位置。
混淆源于这样一个事实,即这也有效:
$locations = Location::all();
$locations->users()->count();
但在本例中,它会为每个位置查询一次。
有关详细信息,请参阅文档:http://laravel.com/docs/eloquent#eager-loading
你应该使用,但我想它在2012年不可用。withCount
所以它应该是什么样子的:
Location::with("users")->withCount("users")->get();
并且您将在对象上有一个可用的属性。users_count
阅读文档了解更多详情:https://laravel.com/docs/5.5/eloquent-relationships#querying-relations(向下滚动一点,您将看到计数相关模型)