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}}%