基本上,我尝试向每个用户添加一个变量(这是一个值)。在这种情况下,该值显示了需要为每个用户进行的计算,但不确定它是否正确以及如何在视图中获得该值:
控制器
$users = User::all();
foreach ($users as $user) {
// Gets past events assigned to user
$past_sessions = count(User::pastUserTraining($user->id)->get());
// Gets past events attended
$amount_attended = count(User::amountTraingAttended($user->id)->get());
// if no past events
if($past_sessions == 0){
$res = 0;
}
else{
$res = ($amount_attended / $past_sessions) * 100;
}
//Rounds number to whole number
$res = round($res);
}
// load the view and pass the users with pes(value for each)
return View::make('attendance.index')
->with('users', $users)
->with('pes', $res);
}
查看
@foreach($users as $key => $value)
<tr class="users">
<td>{{ ucfirst($value->firstName), ' ', ucfirst($value->lastName) }}</td>
<td>{{ $pes }}<td>
@endforeach
所以理论上我希望它能在中卷土重来
用户名,值
用户名,值
目前它返回
用户名,上次计算时所有用户的值相同,
我知道我的方法是有效的,因为我可以显示一个人的计算,而不是所有人都在同一个页面上
您可以使用访问器尝试这种方式;
用户模型
class User extends Eloquent {
...
public function getPesAttribute(){
// Gets past events assigned to user
$past_sessions = count(self::pastUserTraining($this->id)->get());
// Gets past events attended
$amount_attended = count(self::amountTraingAttended($this->id)->get());
// if no past events
if($past_sessions == 0){
return 0;
}
$res = ($amount_attended / $past_sessions) * 100;
//Rounds number to whole number
return round($res);
}
...
}
然后在您的视图中,只需使用$value->pes;
获取这些数据。
然后你就可以把它从你的控制器中清除掉。就像这样;
$users = User::all();
// load the view and pass the users with pes(value for each)
return View::make('attendance.index')
->with('users', $users);
请注意:这尚未经过测试。
您可以在用户模型上进行此计算。
视图:
@foreach($users as $user)
<tr class="users">
<td>{{ ucfirst($user->firstName), ' ', ucfirst($user->lastName) }}</td>
<td>{{ $user->attendedRatio() }}<td>
@endforeach
在用户模型上你可以做
public function attendedRatio() {
// Gets past events assigned to user
$past_sessions = User::pastUserTraining($this->id)->count();
// Gets past events attended
$amount_attended = User::amountTraingAttended($this->id)->count();
// if no past events
if($past_sessions == 0){
return 0
}
$ratio = ($amount_attended / $past_sessions) * 100;
//Rounds number to whole number
return round($ratio);
}
更好的原因(更快)是使用Eloquent hasMany关系和访问计数的联接。但这是一个易于理解的解决方案