【问题标题】:Sort Eloquent models on relationship (one>many)根据关系对 Eloquent 模型进行排序(一>多)
【发布时间】:2016-02-19 01:52:50
【问题描述】:

我有一个名为“Lesson”的模型,它有一个->hasMany() 关系,代表本课的日期。

要检索具有特定时间跨度内日期的每节课,我使用whereHas

$list = Lesson::whereHas('dates', function ($query)  use ($start, $end) {
   $query->where('date','>=', $start->format('Y-m-d'))
         ->where('date','<=', $end->format('Y-m-d'));
})->get()

这按预期工作,但我现在想按与课程关联的“最小”日期对$list 进行排序。

最好我希望使用 Eloquent 模型,因为模型中有一些需要的方法。但如果不可能,也可以使用“普通”的 sql 语句。

【问题讨论】:

  • smallest 日期是什么意思?
  • 最小的 = 最早的日期
  • 那么,你为什么不按日期顺序按日期排序?
  • 因为课程可以附加多个日期,所以mysql不知道使用哪个日期来订购。

标签: laravel eloquent relationship


【解决方案1】:

您可以使用Laravel collections的可用方法。这段代码应该可以做到。

$sortedLessons = $lessons->sortBy(function ($lesson) {
    $dates = $lesson->dates;
    $minDate = $dates->sortBy('date');
    return $minDate;
});

我假设您的日期模型中有一个字段日期。

【讨论】:

  • 从来不知道sortBy() 方法接受了一个函数。
  • 是的,它确实接受回调,不仅 sortBy() 其他收集方法,如 filter() 和 each() 也接受回调
猜你喜欢
  • 2019-12-22
  • 2019-02-23
  • 2017-03-25
  • 2015-03-27
  • 2018-11-20
  • 1970-01-01
  • 2012-01-29
  • 2019-03-15
  • 1970-01-01
相关资源
最近更新 更多