我正在创建一个统计应用程序,我正在尝试将相同评级的运动员组合在一起。
我有两个表:athletes
和athlete_position
。这是因为任何一名运动员都可以在一个以上的位置上进行比赛(不同的评分)。
我能够获得一个获取我正在寻找的所有记录的查询,我只是挂断了以正确的方式将它们组合在一起。
以下是我目前选择运动员的方式:
MyController.php
public function ratings($year, $position_id) {
$athletes = Athlete::where('graduation_year', $year)
->join('athlete_position', 'athlete_position.athlete_id', '=', 'athletes.id')
->where('athlete_position.position_id', '=', $position_id)
->groupBy('athlete_position.rating')
->orderBy('last_name')
->orderBy('athlete_position.rank')
->get();
return response()->json(['data' => $athletes], 200);
}
这很有效。我要完成的下一步是将所有5位明星运动员聚集在一起,将所有4.5位明星运动员聚集在一起,等等。
所以我正在尝试这样的事情:
$collection = collect(
Athlete::where('graduation_year', $year)
->join('athlete_position', 'athlete_position.athlete_id', '=', 'athletes.id')
->where('athlete_position.position_id', '=', $position_id)
)->groupBy('athlete_position.rating');
我将数据发送到另一个应用程序,当我尝试循环响应时:
{% for collection in athletes %}
{% for athlete in athletes %}
{{ athlete.first_name }}<br>
{% endfor %}
{% endfor %}
我收到以下错误: 键“0,1,2,3,4,5,6,7,8,9,10”的数组键“first_name”不存在。
感谢您的任何建议!
答案 0 :(得分:0)
希望如果他们遇到这个帖子,这将有助于其他人。以下是我必须使用的查询以及如何在视图中显示数据。
<强> MyController.php 强>
$collection = collect(
$athletes = Athlete::where('athletes.graduation_year', $year)
->join('athlete_position', 'athlete_position.athlete_id', '=', 'athletes.id')
->where('athlete_position.position_id', '=', $position_id)
->orderBy('rank', 'asc')
->orderBy('rating', 'asc')
->get()
)->groupBy('rating');
return response()->json(['data' => $collection], 200);
然后在我看来(在另一个系统中)我可以循环遍历元素/组(使用twig),如下所示:
...
{% if athletes|length %}
{% for rating, athletes in athletes %}
<div>{{ rating }}</div> // 5.0
{% for athlete in athletes %}
{{ athlete.last_name }}, {{ athlete.first_name }} // Durst, Fred
...
{% endfor %}
{% endfor %}
{% endif %}