В обычном синтаксисе 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
, чтобы иметь возможность использовать углерод.
Это должно дать вам как количество сообщений, так и соответствующий идентификатор пользователя.