2016-02-18 54 views
0

我有一個名爲「Lesson」的模型,它有->hasMany()關係,代表本課的日期。排序關係上的雄辯模型(one> many)

要檢索具有一定的時間跨度內的日期每節課我用一個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語句。

+0

「最小」日期是什麼意思? –

+0

最小=最早的日期 – stUrb

+0

那麼,爲什麼不按順序排序呢? –

回答

0

您可以使用可用的方法Laravel collections。此代碼應該這樣做。

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

我認爲你的日期模型中有一個字段日期。

+0

不知道'sortBy()'方法接受了一個函數。 – stUrb

+0

是的,它確實接受回調函數,不僅僅是sortBy()還有其他一些收集方法,如filter()和each()也接受回調函數 –