Laravel: orderBy a column with collections

2022-08-30 13:51:03

我需要按一个包含集合的列进行排序。

我需要当前登录用户拥有的所有帖子。orderBy(updated_at, 'desc')

这是我的代码:

$posts = auth()->user()->posts->sortByDesc('updated_at');

这是用户模型:

class User extends Authenticatable
{
    public function posts()
    {
      return $this->hasMany(Post::class);
    }
}

它不会返回任何错误,也不会排序!

任何帮助将不胜感激。

附言:

我知道我可以通过以下方式实现这一目标:

$posts = Post::where('user_id', auth()->user()->id)->orderBy('updated_at', 'desc')->get();

但我想对收藏做同样的事情。


答案 1

所以这就是你用SQL排序的方式:

$posts = auth()->user()->posts()->orderBy('updated_at', 'DESC');

对于收藏:

$posts = auth()->user()->posts->sortByDesc('updated_at');

我已经测试了第二个,它为我工作如预期。

文档:https://laravel.com/docs/6.x/collections#method-sortbydesc
*自 Laravel 5.1 起可用


答案 2

@devk是对的。我在第一篇文章中写的内容是正确的。

问题出在视图的数据表中。

它需要将此行添加到数据表选项中:

"order": [[ 5, 'desc' ]], // 5 is the `updated_at` column (the sixth column in my case)

所以这工作正常:

$posts = auth()->user()->posts->sortByDesc('updated_at');

推荐