Laravel按第二级值

时间:2016-01-13 08:54:14

标签: sorting laravel orm eloquent

我有(或没有)帖子的用户,我希望用户的顺序由最后一篇文章决定(显示从未发布过的用户,然后是最早发布的用户)。

用户A昨天发布了 用户B一周前发布。
用户C从未发布。

用户的顺序应为C,B,A。

以下代码是我走了多远,但我似乎无法做到正确。用户的顺序并不像我期望的那样。有什么想法吗?

更新
在eager-load上删除limit()之后,排序的结果是: C,A,B,而不是C,B,A。

$users = User::with('roles', 'flags')->whereHas('subscription', function($x) use($category_id) {
    $x->where('subscription.category_id', '=', $category_id);
})->get()->load([
    'posts' => function($y) {
        return $y->orderBy('created_at', 'ASC');
    }
]);

$users = $users->sortBy(function($user) {
    if(count($user->posts) == 0) {
        return 0;
    }

    return strtotime($user->posts[0]->created_at);
});

return $users;

1 个答案:

答案 0 :(得分:0)

感谢评论部分的@patricus,我的最终(工作)代码是:

$users = User::with('roles', 'flags')->whereHas('subscription', function($x) use($category_id) {
    $x->where('subscription.category_id', '=', $category_id);
})->get()->load([
    'posts' => function($y) {
        return $y->latest();
    }
]);

$users = $users->sortBy(function($user) {
    if(count($user->posts) == 0) {
        return 0;
    }

    return strtotime($user->posts[0]->created_at);
});

return $users;