我有两个相关模型“Yards”和“Inspections”。一个院子可以进行多次检查。
我希望能够根据检查属性“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 )
不过,最好能从 Controller 执行此操作,这样我就可以有其他选项来进行排序。
最佳答案
看起来我可以执行以下操作:
$yards = Yard::orderBy('quarantined', 'DESC')
->orderBy('archived', 'ASC')
->orderBy('name', 'ASC')
->get();
$yards = $yards->sortByDesc('latestInspection.reinspect_at');
关于mysql - Laravel 按关系属性订购数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41004224/