Arrays Laravel:Count through具有多个数组并作为数组输出
我制作了谷歌图表,下面是我的代码: 控制器:Arrays Laravel:Count through具有多个数组并作为数组输出,arrays,laravel,relationship,Arrays,Laravel,Relationship,我制作了谷歌图表,下面是我的代码: 控制器: $settlements = Settlement::where('town_id', Auth::user()->town_id) ->where('reon_id', '1') ->get(); $settlements = Settlement::where('town_id', Auth::user()->town_id) ->where('reon_id', '1') ->get();
$settlements = Settlement::where('town_id', Auth::user()->town_id)
->where('reon_id', '1')
->get();
$settlements = Settlement::where('town_id', Auth::user()->town_id)
->where('reon_id', '1')
->get();
foreach ($settlements as $settlement) {
$sett = $settlement->members->count();
}
视图:
这给了我一个很好的图表,上面有每个营地的成员数量和一个sam条,其中cipher_id==0。这很好
现在我需要计算每个营地有多少成员作为一个数组。我尝试过sam这样的事情,但都在我的控制器中:
$settlements = Settlement::where('town_id', Auth::user()->town_id)
->where('reon_id', '1')
->get();
$settlements = Settlement::where('town_id', Auth::user()->town_id)
->where('reon_id', '1')
->get();
foreach ($settlements as $settlement) {
$sett = $settlement->members->count();
}
但这只输出了一个定居点的数量,即它拥有多少成员。(抱歉英语不好)
我需要一个所有营地的数组
也许这是错误的方法,因为我计划再做一个数组,其中cipher_id==0,然后计算所有这些数字的百分比。例如:
第一个阵列:
256
148
312
第二个阵列:
一百
58
211
因此,结果将是:
39.0625
39.18918919
67.62820513
我希望我能很好地解释为什么我要用这种方式来计数。这个问题的解决办法是什么 您可以使用该方法计算关系:
$settlements = Settlement::where('town_id', Auth::user()->town_id)
->withCount('members')
->where('reon_id', '1')
->get();
它将向每个结算
对象添加members\u count
属性
发件人:
如果您想在不实际加载的情况下计算关系中的结果数,可以使用withCount
方法,该方法将在结果模型上放置{relation}\u count
列
当然,您可以使用自己的方式,但在这种情况下,您需要首先加载数据以避免N+1问题:
->with('members')
然后数一数成员:
foreach ($settlements as $settlement) {
$sett[] = $settlement->members->count();
}
此外,这将把所有成员加载到内存中。如果您不想这样做,请使用
with count()
是的,这就是我要找的东西。谢谢@Alexey Mezenin;)还有一件事。。。如何获得相同的结果,但在cipher_id==0的情况下,如果cipher_id在其他模型(而不是结算模型)中,在实际进行计数的表中?@NenadM在这种情况下,使用闭包。例如,->withCount(['members'=>function($q){$q->where('cipher\u id',0);}])
$sett[]=$solution->members->where('cipher\u id',0')->count();这是怎么回事?@NenadM是的,你也可以这样做,但是withCount()
是一个更好的解决方案。@NenadM如果我理解正确,你可以计算所有成员,然后使用map()
或transform()
收集方法迭代收集并计算每个组的成员百分比。或者您可以在一个视图中使用类似于{{$consolution->members\u count/$totalMembers*100}}%