【问题标题】:How to re-order an Eloquent collection?如何重新订购 Eloquent 合集?
【发布时间】:2017-05-22 12:43:21
【问题描述】:

我有一组通过关系检索到的记录,我想按created_at 字段对它们进行排序。这在 Eloquent 中可行吗?

这是我检索集合的方式:

$skills = $employee->skills;

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

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

【问题讨论】:

    标签: laravel collections eloquent


    【解决方案1】:

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

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

    您可以在您的collection 上使用sortBysortByDesc

    【讨论】:

      【解决方案2】:

      失败的原因是orderBy 是一个查询方法而不是一个集合方法。

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

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

      【讨论】:

        【解决方案3】:

        您需要在查询而不是关系上添加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);
        }
        

        【讨论】:

          【解决方案4】:

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

          Employee.php

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

          如果你只是偶尔想订购它们,你可以使用orderBy(),但在关系上,而不是属性上:

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

          【讨论】:

            【解决方案5】:

            集合有sortBysortByDesc

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多