我有一个名为errors
的表,其中包含以下字段:id, website_id, message & level.
我正在尝试获取错误最多的前5个网站。
查询
SELECT website_id, COUNT(id) AS 'errors'
FROM errors GROUP BY website_id ORDER BY COUNT(*) DESC
我不知道如何使用Laravel Query Builder和Eloquent执行此操作。任何人都可以帮助我吗?
数据库截图
答案 0 :(得分:5)
您可以使用this post函数执行原始查询。
但是如果你想使用雄辩,你必须使用关系并查询这些。例如,如果您的Website
模型与Error
模型有关系,则可以执行以下操作以获取错误最多的网站模型:
Website::withCount('errors') // Count the errors
->orderBy('errors_count', 'desc') // Order by the error count
->take(5) // Take the first 5
->get();
答案 1 :(得分:2)
试试这个:https://laravel.com/docs/5.4/queries#retrieving-results
$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();
答案 2 :(得分:1)
这可能会有所帮助。
$result = Website::selectRaw("website_id,count(id) as errors")
->groupBy('website_id')
->orderBy('errors','DESC')
->limit('5')
->get();
答案 3 :(得分:0)
尝试简化版本以使laravel雄辩;
$some_data = YourModel::select('column_name')
->groupBy('column_name')
->orderByRaw('COUNT(*) DESC')
->take(5)
->get();