我提高了我在laravel的技能,使一个简单的挑战网络,但我坚持下一个问题。
我有带有id,名称,邮件等的用户表。挑战表我列出所有的挑战(列id,姓名,正文,答案,得分)和第三个表名为“Answers”,我发布每个尝试使用列id,user_id,challenge_id,success(boolean)和score来解决挑战的用户。
现在我试图用他们的分数对用户进行排名。问题是在表answer中显示列'score'的sum(),其中user_id.answers = users.id。所以我可以轻松获得每个用户的总分。
现在我解决了在刀片中执行此操作的问题:
@foreach($users as $user)
<tr>
<th>{{ $user->id }}</th>
<td>{{ $user->name }}</td>
<td>Team pindonga</td>
<td>{{ score = DB::table('answers')->where('user_id', $user->id)->sum('score') }} </td> </tr>
@endforeach
完美的工作,但我想通过desc得分得到它们(现在我用js解决了desc但想要从雄辩的查询得到desc命令)并在刀片中有这样的东西:
@foreach($users as $user)
<tr>
<th>{{ $user->id }}</th>
<td>{{ $user->name }}</td>
<td>Team pindonga</td>
<td>{{ $team->score }} </td> </tr>
@endforeach
我正在考虑用访问器解决它做这样的事情:
public function getScoreAttribute($value)
{
return $this->groupBy('user_id')->where('user_id', '=', $value)->sum('score');
}
我也有一个关系属于在用户的答案模型和用户的答案中的hasMany。但我不确定如何将结果传递给刀片。尝试修补:
>>> \App\Answer::find(1)->score;
=> "3400"
>>> \App\Answer::find(2)->score;
=> "3400"
>>> \App\Answer::find(5)->score;
=> "3400"
总是得到id = 1的总和。并用$ user->得分;在叶片foreach我得到'0'。
使用与Blade的关系将是{{ $user->answers->sum('score') }}
。无需访问者。
为了排序,我将使用sortByDesc收集方法。
$users = User::get();
$users = $users->sortByDesc(function ($user) {
return $user->answers->sum('score');
});
我想这就是你要找的东西。需要一段时间才能习惯Eloquent ORM :-)
foreach($users as $user){
print $user->answers->sum('score');
}