我已经收到了通过关系检索到的记录集合,并且我想通过created_at
字段对它们进行排序。这在Eloquent中是否可行?
以下是我检索集合的方法:
$skills = $employee->skills;
我想通过他们的创作订购这个$skills
集合。我已经尝试了$skills->orderBy('created_at', 'desc');
但是Collection类没有orderBy
方法。
我想这个问题非常简单,我错过了一些东西......
答案 0 :(得分:3)
您可以通过两种方式完成此操作。您可以在查询时orderBy
查看结果,例如
$employee->skills()->orderBy('created_at', 'desc')->get();
或强>
您可以在sortBy
sortByDesc
和collection
答案 1 :(得分:0)
您需要在查询上添加orderBy
约束而不是关系。
例如,
$employees = Employee::where('salary', '>', '50000') // just an example
->with('skills') // eager loading the relationship
->orderBy('created_at', 'desc')
->get();
然后:
foreach($employees as $employee)
{
var_dump($employee->skill);
}
答案 2 :(得分:0)
失败的原因是orderBy
是一种查询方法,而不是一种收集方法。
如果您使用$skills = $employee->skills()->orderBy('created_at', 'desc')->get();
,则会按照您想要的顺序查询技能。
或者,如果您已经有一个想要重新订购的集合,则可以使用sortBy
或sortByDesc
方法。
答案 3 :(得分:0)
如果您希望结果始终按字段排序,您可以在关系中指定:
<强> Employee.php 强>
public function skills() {
return $this->hasMany(Skills::class)->orderBy('created_at');
}
如果您只是想有时订购它们,可以使用orderBy()
,但是关系,而不是财产:
$skills = $employee->skills()->orderBy('created_at')->get();
答案 4 :(得分:0)
收藏集有sortBy
和sortByDesc
$skills = $skills->sortBy('created_at');
$skills = $skills->sortByDesc('created_at');