我需要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();
但我想对收藏品做同样的事情。
答案 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