Поиск пользователя с самым высоким постом, созданным за последние 24 часа, laravel Eloquent

Как найти пользователя с самым высоким постом, созданным за последние 24 часа в laravel? отсортированы по количеству постов в порядке убывания.

самый высокий пост - целое число или строка?

DPS 10.11.2018 12:50

Самый высокий пост? Что именно вы имеете в виду под высшим? Точки? Комментарии? так далее

rpm192 10.11.2018 12:51

Количество сообщений, созданных пользователем

Nicholas Francis 10.11.2018 12:52

Ах! Опубликовать модель в вашем приложении?

rpm192 10.11.2018 12:52

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

Nicholas Francis 10.11.2018 12:53

Проверьте мой ответ ниже и скажите, работает он или нет.

rpm192 10.11.2018 13:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
4
6
1 947
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В обычном синтаксисе 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 withCount method, which will place a {relation}_count column 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;

Другие вопросы по теме