如何在Laravel中用两列对两次排序?

zwl*_*619 0 php laravel eloquent laravel-5 laravel-5.4

我正在使用Laravel 5.4,如何对两列进行两次排序?

例如:

ArticleController.php

public function index()
{
    $articles = Auth::user()->articles->sortByDesc('updated_at')->sortByDesc('status');
    return view('index',  compact('articles'));
}
Run Code Online (Sandbox Code Playgroud)

我使用了sortByDesc()两次,但结果不符合规定,我该怎么办?

更新: User.php

public function articles()
{
    return $this->hasMany('App\Article');
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*łek 6

您不应该对集合进行排序,但是应该从数据库中获取排序结果,如下所示:

$articles = Auth::user()->articles()
              ->orderBy('updated_at', 'DESC')
              ->orderBy('status','DESC')
              ->get();
Run Code Online (Sandbox Code Playgroud)

为了进一步说明-在您的代码中,您从数据库中获得了所有结果(以随机顺序),然​​后尝试对所有结果进行排序。

在我介绍的代码中,您对数据库中的结果进行了排序,因此您可以轻松地对多个列进行排序。

请注意我的代码中的差异-而不是->articles我在最后使用->articles()和添加->get()以获得结果。

  • @ zwl1619因此,假设您在问题中编写的是“文章”关系而不是“ artilces”,并且在我展示的代码中的文章后面添加了()之后,它应该可以正常工作,因此您使用了我编写的确切代码这里。因为在这里使用`articles()`和`articles`会有很大的不同 (2认同)