Laravel的Eloquent查询可以计算关联对象的数量。
Laravel的Eloquent查询可以计算关联对象的数量。
我刚接触 Laravel 和 Eloquent,我不确定这是否可行。但是我有2个表,它们之间是一对多的关系。一个表是“locations”,另一个是“users”。一个位置可以有多个用户。
所以,如果我想获取所有位置和它们的所有用户,我只需要执行这个操作:
Location::with("users")->get();
但我还想知道每个位置有多少用户,我尝试过这样做:
Location::with("users")->count("users")->get();
但那行不通。
admin 更改状态以发布 2023年5月24日
你应该只使用withCount
,但我想在2012年它还没有可用。
所以这就是它应该长成什么样:
Location::with("users")->withCount("users")->get();
然后你将在对象上有一个users_count
属性可用。
阅读文档以获取更多详细信息:https://laravel.com/docs/5.5/eloquent-relationships#querying-relations(向下滚动一点,你就会看到计算相关模型)
提到的n+1问题,如果使用急切加载就不会发生。\n
$locations = Location::with('users')->get(); $locations->users()->count();
\n无论您有多少用户或位置,这应该产生三个查询。\n
- \n
- 对位置模型进行计数查询
- 从位置选择*
- 在哪里选择*的用户
\n
\n
\n
\n混淆是因为这也可以:\n
$locations = Location::all(); $locations->users()->count();
\n但在这种情况下,它会为每个位置查询一次。\n更多信息请参见文档:\nhttp://laravel.com/docs/eloquent#eager-loading