我有一个通过关系检索的记录集合,我想通过created_at
字段订购它们。这在Eloquent中是否可行?
以下是我检索集合的方法:
$skills = $employee->skills;
我想通过他们的创作来订购这个$skills
系列。我尝试过$skills->orderBy('created_at', 'desc');
,但Collection类没有orderBy
方法。
我想这个问题很简单,我错过了什么......
失败的原因是orderBy
是一种查询方法,而不是一种收集方法。
如果您使用$skills = $employee->skills()->orderBy('created_at', 'desc')->get();
,这将按您想要的顺序查询技能。
或者,如果您已经有一个想要重新订购的集合,则可以使用sortBy
或sortByDesc
方法。
你可以用两种方式做到这一点。您可以在查询时orderBy
您的结果,如
$employee->skills()->orderBy('created_at', 'desc')->get();
要么
你可以在你的sortBy
上使用sortByDesc
和collection
您需要在查询上添加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);
}
如果希望结果始终按字段排序,则可以在关系上指定:
Employee.php
public function skills() {
return $this->hasMany(Skills::class)->orderBy('created_at');
}
如果你只是想有时订购它们,你可以使用orderBy()
,但是关系,而不是财产:
$skills = $employee->skills()->orderBy('created_at')->get();
收集有sortBy
和sortByDesc
$skills = $skills->sortBy('created_at');
$skills = $skills->sortByDesc('created_at');