Laravel:orderBy包含集合的列

时间:2017-03-17 10:16:02

标签: php laravel eloquent laravel-5.4

我需要OrderBy带有集合的列。

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

这是我的代码:

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

这是用户模型:

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

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

任何帮助都会非常感激。

P.S:

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

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

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

3 个答案:

答案 0 :(得分:16)

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

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

还有收藏品:

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

我已经对第二个进行了测试,它对我有用。

答案 1 :(得分:1)

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

问题出现在视图中的DataTables

需要将此行添加到Datatables选项:

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

所以这很好用:

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

答案 2 :(得分:0)

尝试将以下内容添加到您的用户模型

public function posts_sortedByDesc(){
      return $this->hasMany(Post::class)->sortByDesc('updated_at');
   }

然后通过调用posts_sortedByDesc而不是posts

来获取帖子