【问题标题】:Eloquent Sorting and Grouping on Relationship雄辩的关系排序和分组
【发布时间】:2015-03-21 02:51:42
【问题描述】:

我有三个这样简化的表格:

 People (id, first_name, last_name)
 Awards (id, name)
 AwardPerson (id, people_id, award_id, year_gained)

我需要在页面上显示这个,奖项按年份降序排列。理想情况下,我希望有一个这样的集合或数组:

array(
     '2005' => array(
         'AwardPerson' => array(
             'person' => array(person data...),
             'award'  => array(award data...)
          ),
          'AwardPerson2' => array(
              'person' => array(person data...),
              'award'  => array(award data...)
          ),
      )
      '2004' => array(...

目前我的查询设置如下:

$years = AwardPerson::whereHas('person', function($q)
          {
            $q->current() //get only people with current appoitnments
          })
          ->with('person', 'award')
          ->orderBy('year_gained', 'desc')
          ->get();

$years = $years->groupBy('year_gained');

这很好,除了我需要能够按 person->last_name 对每个 AwardPerson 进行排序。我试过按年份分组后循环、遍历和排序:

$years->each(function($year)
    {
      usort($year, function($a, $b)
      {
        if($a->person->last_name == $b->person->last_name)
        {
          return 0;
        } 
        return ($a->person->last_name < $b->person->last_name) ? -1 : 1;
      });
    });

但这似乎对订单没有影响。我也知道我可能应该使用数据透视表进行此查询,但我无法弄清楚如何以正确的格式获取数据。

【问题讨论】:

    标签: php sorting laravel eloquent


    【解决方案1】:

    你有什么,然后添加一个与人的连接,就像这样。

    $years = AwardPerson
          ->select('AwardPerson.*')
          ->whereHas('person', function($q)
          {
            $q->current() //get only people with current appoitnments
          })
          ->join('people', 'people.id', '=', 'AwardPerson.id')
          ->with('person', 'award')
          ->orderBy('year_gained', 'desc')
          ->orderBy('people.last_name', 'ASC')
          ->get();
    
    $years = $years->groupBy('year_gained');
    

    【讨论】:

    • 效果很好,而且比我想象的要简单得多。谢谢!
    猜你喜欢
    • 2021-12-15
    • 2018-11-07
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多