在Laravel中使用hasMany()时,如何在每个相同记录上仅获取最新记录

时间:2016-09-29 12:43:06

标签: php laravel

所以,我有这样的事情:

else

CounselingRequest 结构:

  • ID
  • student_id数据
  • lecturer_schedule_id
  • 状态
  • deleted_at
  • created_at
  • 的updated_at

我需要来自 counselingRequests(),当它有相同的lecturer_schedule_id时,它必须只返回最新的CounselingRequest。

示例(现在)来自counselingRequests()的结果:

class Student {
    /**
     * Get the counseling_requests for the student.
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function counselingRequests()
    {
        return $this->hasMany(CounselingRequest::class);
    }
}

预期结果:

id | student_id | lecturer_schedule_id | status | created_at
1  | 1          | 2                    | 0      | 2016-09-01
2  | 1          | 2                    | 1      | 2016-09-02
3  | 1          | 3                    | 1      | 2016-09-02
4  | 1          | 4                    | 0      | 2016-09-03

1 个答案:

答案 0 :(得分:1)

对于相同的lecturer_schedule_idgroup_by会选择最后一个,然后按升序排序。

Student::with(['councelingRequests'=>function($query)
          {
            $query->groupBy('lecturer_schedule_id')
           }])->get();

但是你会得到:

id | student_id | lecturer_schedule_id | status | created_at
3  | 1          | 3                    | 1      | 2016-09-02
4  | 1          | 4                    | 0      | 2016-09-03
2  | 1          | 2                    | 1      | 2016-09-02