Laravel的Eloquent查询可以计算关联对象的数量。

31 浏览
0 Comments

Laravel的Eloquent查询可以计算关联对象的数量。

我刚接触 Laravel 和 Eloquent,我不确定这是否可行。但是我有2个表,它们之间是一对多的关系。一个表是“locations”,另一个是“users”。一个位置可以有多个用户。

所以,如果我想获取所有位置和它们的所有用户,我只需要执行这个操作:

Location::with("users")->get();

但我还想知道每个位置有多少用户,我尝试过这样做:

Location::with("users")->count("users")->get();

但那行不通。

admin 更改状态以发布 2023年5月24日
0
0 Comments

你应该只使用withCount,但我想在2012年它还没有可用。

所以这就是它应该长成什么样:

Location::with("users")->withCount("users")->get();

然后你将在对象上有一个users_count属性可用。

阅读文档以获取更多详细信息:https://laravel.com/docs/5.5/eloquent-relationships#querying-relations(向下滚动一点,你就会看到计算相关模型

0
0 Comments

提到的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

0