如何重新订购Eloquent系列?

问题描述 投票:0回答:5

我有一个通过关系检索的记录集合,我想通过created_at字段订购它们。这在Eloquent中是否可行?

以下是我检索集合的方法:

$skills = $employee->skills;

我想通过他们的创作来订购这个$skills系列。我尝试过$skills->orderBy('created_at', 'desc');,但Collection类没有orderBy方法。

我想这个问题很简单,我错过了什么......

laravel collections eloquent
5个回答
0
投票

失败的原因是orderBy是一种查询方法,而不是一种收集方法。

如果您使用$skills = $employee->skills()->orderBy('created_at', 'desc')->get();,这将按您想要的顺序查询技能。

或者,如果您已经有一个想要重新订购的集合,则可以使用sortBysortByDesc方法。


3
投票

你可以用两种方式做到这一点。您可以在查询时orderBy您的结果,如

$employee->skills()->orderBy('created_at', 'desc')->get();

要么

你可以在你的sortBy上使用sortByDesccollection


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);
}

0
投票

如果希望结果始终按字段排序,则可以在关系上指定:

Employee.php

public function skills() {
    return $this->hasMany(Skills::class)->orderBy('created_at');
}

如果你只是想有时订购它们,你可以使用orderBy(),但是关系,而不是财产:

$skills = $employee->skills()->orderBy('created_at')->get();

0
投票

收集有sortBysortByDesc

$skills = $skills->sortBy('created_at');
$skills = $skills->sortByDesc('created_at');
© www.soinside.com 2019 - 2024. All rights reserved.