[英]Laravel eloquent counting a relation
我是laravel和eloquent的新手,我不确定这是否可能。 但是我有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
您需要在每个位置记录上调用count方法以获取每个位置的用户数,这是一个示例:
foreach(Location::get() as $location) // or foreach(Location::with("users")->get() as $location)
{
echo $location->users()->count();
}
这应该可以解决您的问题,并为您提供每个位置的用户数量。 您可以在循环中添加一个检查以忽略用户count = 0的位置
你应该只使用withCount
但我想它在2012年才可用。
所以这是它应该是这样的:
Location::with("users")->withCount("users")->get();
并且您将在对象上使用users_count
属性。
阅读文档以获取更多详细信息: https : //laravel.com/docs/5.5/eloquent-relationships#querying-relations (向下滚动一下,您将看到计数相关模型 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.