我有两个相关型号'Yards'& “检查”。一个院子可以进行多次检查。
我希望能够根据检查属性'reinspect_at'订购Yard列表。我有一个模型方法,根据检验日期返回码的最新检验。
我尝试了以下内容:
$yards = Yard::orderBy('quarantined', 'DESC')
->with(['latestInspection' => function($query){
$query->orderBy('reinspect_at', 'asc');
}])
->get();
但是这并没有根据reinspect_at日期订购院子,它只是为每个院子订购最新的检查。
我希望能够总是返回院子里的最新检查,但是需要能够根据reinspect_at日期对每个院子的最新检查重新排序院子清单。干杯
下面的院子清单显示屏幕截图。如您所见,检查截止日期是我希望能够订购结果的方式。
**更新** 看起来我想要的是在前端模板中使用:
@foreach( $yards->sortBy('latestInspection.reinspect_at') as $yard )
最好能够从控制器执行此操作,因此我可以通过其他选项进行排序。
答案 0 :(得分:0)
例如:
function latestInspection() {
return $this->hasOne('App\Yard')->orderBy('reinspect_at', 'asc');
}
和
$yards = Yard::with('latestInspection')->orderBy('quarantined', 'DESC')->get();
答案 1 :(得分:0)
您可以使用返回集合的某些方法。通常你想在数据库端处理这一切,但我认为这样做是值得的,因为它大大简化了过程。
$yards = Yard::with(['inspections'])->get()->sortBy(function($yard) {
return $yard->inspections->max('reinspect_at');
});
我通过隔离删除了您的订购。如果您还要使用reinspect_date进行排序,则不确定如何处理。
答案 2 :(得分:0)
看起来我可以执行以下操作:
$yards = Yard::orderBy('quarantined', 'DESC')
->orderBy('archived', 'ASC')
->orderBy('name', 'ASC')
->get();
$yards = $yards->sortByDesc('latestInspection.reinspect_at');