$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);
}
// Get a Collections of Skill-models ordered by the oldest skill first.
$skills = $employee->skills()->reorder()->orderByDesc('created_at')->get();
// Same result as the previous example, but different syntax.
$skills = $employee->skills()->reorder()->oldest()->get();
// Or just give some arguments to the reorder() method directly:
$skills = $employee->skills()->reorder('created_at', 'desc')->get();
6条答案
按热度按时间egdjgwm81#
您可以通过两种方式来实现这一点。您可以在查询时
orderBy
您的结果,例如您可以在
collection
上使用sortBy
和sortByDesc
wmomyfyw2#
失败的原因是
orderBy
是查询方法,而不是收集方法。如果您使用
$skills = $employee->skills()->orderBy('created_at', 'desc')->get();
,这将按照您想要的顺序查询技能。或者,如果您已经有了一个要重新排序的集合,则可以使用
sortBy
或sortByDesc
方法。2skhul333#
您需要在查询上而不是在关系上添加
orderBy
约束。例如,
然后:
q5lcpyga4#
如果希望结果总是按字段排序,可以在关系中指定:
雇员.php
如果你有时候只是想对它们进行排序,你可以使用
orderBy()
,但是是在关系上,而不是在属性上:rpppsulh5#
集合包含
sortBy
和sortByDesc
xtfmy6hx6#
这个Stackoverflow问题询问如何订购Eloquent集合。但是,我想提出一个不同的解决方案来代替问题中的示例。我想推荐给use an ordering on the query itself for performance reasons。
就像@ Don 't Panic建议的那样,您可以为关系指定一个默认顺序,以获得更大的重用性便利:
app/Models/Employee.php
然而,如果你已经像上面的代码那样对你的查询设置了一个排序,那么任何额外的排序都将被忽略。所以,如果你想在另一种情况下使用不同的排序,那就很麻烦了。要覆盖这个默认的排序并用一个新的排序对查询重新排序,你需要使用
reorder()
方法。例如: