Как найти пользователя с самым высоким постом, созданным за последние 24 часа в laravel? отсортированы по количеству постов в порядке убывания.
Самый высокий пост? Что именно вы имеете в виду под высшим? Точки? Комментарии? так далее
Количество сообщений, созданных пользователем
Ах! Опубликовать модель в вашем приложении?
Да! Пользователь модели имеет много сообщений. Сложная часть - я хочу ранжировать пользователя по количеству сообщений, созданных за последние 24 часа.
Проверьте мой ответ ниже и скажите, работает он или нет.






В обычном синтаксисе 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.
Это должно дать вам как количество сообщений, так и соответствующий идентификатор пользователя.
use Carbon\Carbon;
получить идентификатор пользователя:
$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();
Если я не ошибаюсь, вы запрашиваете пользователей с наибольшим количеством сообщений, созданных за последние 24 часа.
Для этого сделайте следующее:
$users = User::withCount(['posts' => function ($query) {
$query->where('created_at', '>=', carbon()->now()->subDay());
}])->orderBy('posts_count', 'DESC')
->get();
Как указано в документация, вы можете добавлять ограничения к запросам.
Counting Related Models
If you want to count the number of results from a relationship without actually loading them you may use the
withCountmethod, which will place a{relation}_countcolumn on your resulting models. For example:$posts = App\Post::withCount('comments')->get(); foreach ($posts as $post) { echo $post->comments_count; }You may add the "counts" for multiple relations as well as add constraints to the queries:
$posts = Post::withCount(['votes', 'comments' => function ($query) { $query->where('content', 'like', 'foo%'); }])->get(); echo $posts[0]->votes_count; echo $posts[0]->comments_count;
самый высокий пост - целое число или строка?