Поиск пользователя с самым высоким сообщением, созданным за последние 24 часа, laravel Eloquent - PullRequest
0 голосов
/ 10 ноября 2018

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

Ответы [ 3 ]

0 голосов
/ 10 ноября 2018
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();
0 голосов
/ 10 ноября 2018

Если я не ошибаюсь, вы спрашиваете пользователей с наибольшим количеством сообщений, созданных за последние 24 часа.

Для этого сделайте следующее:

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

Как указано в документации , вы можете добавить ограничения к запросам.

Подсчет связанных моделей

Если вы хотите посчитать количество результатов отношений без фактической их загрузки, вы можете использовать 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;
0 голосов
/ 10 ноября 2018

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

Это должно дать вам как количество сообщений, так и соответствующий идентификатор пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...