laravel Eloquent寻找最近24小时内创建帖子最多的用户

时间:2018-11-10 11:40:21

标签: laravel eloquent

如何查找在laravel中最近24小时内创建帖子数量最高的用户? 按帖子数降序排列。

3 个答案:

答案 0 :(得分:4)

如果我没记错的话,您是在问过去24小时内创建帖子数量最多的用户。

要实现此目的,请执行以下操作:

$users = User::withCount(['posts' => function ($query) {
            $query->where('created_at', '>=', carbon()->now()->subDay());
        }])->orderBy('posts_count', 'DESC')
            ->get();

fseek()所述,您可以向查询添加约束。

  

计算相关模型

     

如果您想计算某个关系中的结果数而不实际加载它们,则可以使用   withCount方法,该方法会将{relation}_count列放在   您生成的模型。例如:

$posts = App\Post::withCount('comments')->get();

foreach ($posts as $post) {
    echo $post->comments_count;
}
     

您可以添加多个关系的“计数”,也可以添加   查询约束:

$posts = Post::withCount(['votes', 'comments' => function ($query) {
    $query->where('content', 'like', 'foo%');
}])->get();

echo $posts[0]->votes_count;
echo $posts[0]->comments_count;

答案 1 :(得分:1)

在常规SQL语法中,您需要以下内容:

SELECT COUNT(id), user_id
FROM posts
WHERE created_at = today
GROUP BY user_id
ORDER BY COUNT(user_id) DESC
LIMIT 1;

它获取所有帖子,按user_id分组,对user_id最高的帖子进行排序,并获得第一条记录。

我绝不是SQL方面的专家,更不用说Laravel中的查询生成器了,所以其他人可能会写得更好。

我知道您可以通过使用Carbon获得今天创建的帖子,如下所示: Post::whereDate('created_at', Carbon::today())->get();


编辑:这可能对您有用:

$last24h = Carbon::now()->subDay();

DB::table('posts')
  ->select(array(DB::raw('COUNT(id)', 'user_id')))
  ->where('created_at', '>=', $last24h)
  ->groupBy('user_id')
  ->orderBy('COUNT(id)', 'DESC')
  ->limit(1)
  ->get();

请确保包含use Carbon\Carbon才能使用Carbon。

这应该为您提供帖子数量和相应的用户ID。

答案 2 :(得分:1)

use Carbon\Carbon;

获取用户ID:

 $minusday = Carbon::now()->subDay();
 $user_id = DB::table('posts')
            ->select('user_id', DB::raw('count(id) as total'))
            ->where('created_at', '>=', $minusday)
            ->groupBy('user_id')
            ->orderBy('total','desc')
            ->limit(1)
            ->get();