Laravel获得最多记录的前5个ID

时间:2017-04-19 09:24:49

标签: php mysql laravel eloquent laravel-query-builder

我有一个名为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执行此操作。任何人都可以帮助我吗?

数据库截图

enter image description here

4 个答案:

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