Laravel:如何使用集合将记录组合​​在一起?

时间:2016-12-27 16:22:39

标签: laravel-5 laravel-collection

我正在创建一个统计应用程序,我正在尝试将相同评级的运动员组合在一起。

我有两个表:athletesathlete_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”不存在。

感谢您的任何建议!

1 个答案:

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