获取@foreach Laravel 5.2中重复行的总和
Get one total sum for repeated rows in @foreach Laravel 5.2
我找到了 Sum values in foreach loop php
但我需要根据我的情况进行调整。我有 table 三个评级和 user_id
。我需要从管理员 table 中每个用户的所有评分中获取平均值。例如,如果用户制作了两个作品并且有 5,5,5 和 5,5,4 我想显示 4.835 ,但我得到的不是这个:
user_id -- 平均值
200 -- 4.67 | 4.835 |
我需要:
200 -- 4.835
控制器:
$feedbacks = DB::table('feedback')->groupBy('user_id')->paginate(100);
$feedbacks_get = DB::table('feedback')->get();
Blade:
@foreach( $feedbacks as $wrk)
<tr>
<td>
{{$wrk->user_id}}
</td>
<td>
<?php $sum = 0;$i = 0;?>
@foreach($feedbacks_get as $e)
@if ( $e->user_id == $wrk->user_id)
<?php
$i++;
$sum+= (($e->rating1 + $e->rating2 + $e->rating3 ))/3;
$result= round($sum,2)/$i .' | ';
if($result<=4){
echo '<span class="red;">'.$result.'</span>' ;
}
elseif($result>4){
echo $result;
}
?>
@endif
@endforeach
</td>
</tr>
@endforeach
@foreach( $feedbacks as $wrk)
<tr>
<td>
{{$wrk->user_id}}
</td>
<td>
<?php $sum = 0;$i = 0;?>
@foreach($feedbacks_get as $e)
@if ( $e->user_id == $wrk->user_id)
<?php
$i++;
$sum+= (($e->rating1 + $e->rating2 + $e->rating3 ))/3;
?>
@endif
@endforeach
$result= round($sum,2)/$i ;
if($result<=4){
echo '<span class="red;">'.$result.'|</span>' ;
}
elseif($result>4){
echo $result.' | ';
}
</td>
</tr>
@endforeach
Laravel 中的数据库查询结果始终是 Laravel Collection,因此您可以使用这些函数自动执行此操作,如下所示:
$average = $feedbacks_get->where('user_id', $userId)
->map(function ($feedback) {
return ($feedback->rating1 + $feedback->rating2 + $feedback->rating3) / 3;
})
->avg();
我找到了 Sum values in foreach loop php
但我需要根据我的情况进行调整。我有 table 三个评级和 user_id
。我需要从管理员 table 中每个用户的所有评分中获取平均值。例如,如果用户制作了两个作品并且有 5,5,5 和 5,5,4 我想显示 4.835 ,但我得到的不是这个:
user_id -- 平均值
200 -- 4.67 | 4.835 |
我需要:
200 -- 4.835
控制器:
$feedbacks = DB::table('feedback')->groupBy('user_id')->paginate(100);
$feedbacks_get = DB::table('feedback')->get();
Blade:
@foreach( $feedbacks as $wrk)
<tr>
<td>
{{$wrk->user_id}}
</td>
<td>
<?php $sum = 0;$i = 0;?>
@foreach($feedbacks_get as $e)
@if ( $e->user_id == $wrk->user_id)
<?php
$i++;
$sum+= (($e->rating1 + $e->rating2 + $e->rating3 ))/3;
$result= round($sum,2)/$i .' | ';
if($result<=4){
echo '<span class="red;">'.$result.'</span>' ;
}
elseif($result>4){
echo $result;
}
?>
@endif
@endforeach
</td>
</tr>
@endforeach
@foreach( $feedbacks as $wrk)
<tr>
<td>
{{$wrk->user_id}}
</td>
<td>
<?php $sum = 0;$i = 0;?>
@foreach($feedbacks_get as $e)
@if ( $e->user_id == $wrk->user_id)
<?php
$i++;
$sum+= (($e->rating1 + $e->rating2 + $e->rating3 ))/3;
?>
@endif
@endforeach
$result= round($sum,2)/$i ;
if($result<=4){
echo '<span class="red;">'.$result.'|</span>' ;
}
elseif($result>4){
echo $result.' | ';
}
</td>
</tr>
@endforeach
Laravel 中的数据库查询结果始终是 Laravel Collection,因此您可以使用这些函数自动执行此操作,如下所示:
$average = $feedbacks_get->where('user_id', $userId)
->map(function ($feedback) {
return ($feedback->rating1 + $feedback->rating2 + $feedback->rating3) / 3;
})
->avg();