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();