如何重新订购Eloquent系列?

时间:2017-05-22 12:43:21

标签: laravel collections eloquent

我已经收到了通过关系检索到的记录集合,并且我想通过created_at字段对它们进行排序。这在Eloquent中是否可行?

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

$skills = $employee->skills;

我想通过他们的创作订购这个$skills集合。我已经尝试了$skills->orderBy('created_at', 'desc');但是Collection类没有orderBy方法。

我想这个问题非常简单,我错过了一些东西......

5 个答案:

答案 0 :(得分:3)

您可以通过两种方式完成此操作。您可以在查询时orderBy查看结果,例如

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

您可以在sortBy

上使用sortByDesccollection

答案 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();,则会按照您想要的顺序查询技能。

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

答案 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)

收藏集有sortBysortByDesc

$skills = $skills->sortBy('created_at');
$skills = $skills->sortByDesc('created_at');