Laravel получает 5 лучших идентификаторов с большинством записей

У меня есть стол errors, Таблица имеет следующие поля: id, website_id, message & level, Я пытаюсь получить 5 лучших сайтов с наибольшим количеством ошибок. SQL-запрос будет
SELECT website_id, COUNT(id) AS 'errors' FROM errors GROUP BY website_id ORDER BY COUNT(*) DESC

Я понятия не имею, как это сделать с Laraval и построителем запросов / eloquent. Не могли бы вы, люди, выручить меня? (:

Спасибо за прочтение!

Скриншот базы данных:

3 ответа

Решение

Вы могли бы использовать DB::raw("{query}") функция для выполнения вашего необработанного запроса.

Но если вы хотите использовать eloquent, вам придется использовать отношения и запрашивать их. Например, если у вас есть Website модель с отношением к Error модель, вы можете сделать следующее, чтобы получить модели сайта с наибольшим количеством ошибок:

Website::withCount('errors')            // Count the errors
    ->orderBy('errors_count', 'desc')   // Order by the error count
    ->take(5)                           // Take the first 5
    ->get();

Это может быть полезно.

    $result = Website::selectRaw("website_id,count(id) as errors")
              ->groupBy('website_id')
              ->orderBy('errors','DESC')
              ->limit('5')
              ->get();

Попробуйте это: https://laravel.com/docs/5.4/queries

$errors = DB::table('errors')
        ->select('website_id', DB::raw('COUNT(id) as errors'))
        ->groupBy('website_id')
        ->orderBy(DB::raw('COUNT(id)'), 'DESC')
        ->take(10)
        ->get();

Попробуйте эту упрощенную версию для laravel eloquent;

$some_data = YourModel::select('column_name')
            ->groupBy('column_name')
            ->orderByRaw('COUNT(*) DESC')
            ->take(5)
            ->get();
Другие вопросы по тегам