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

Laravel Get the Top 5 IDs with the Most Records

我有一个名为 errors 的 table,其中包含以下字段:id, website_id, message & level. 我正在尝试获取错误最多的前 5 个网站。

查询

SELECT website_id, COUNT(id) AS 'errors' FROM errors GROUP BY website_id ORDER BY COUNT(*) DESC

我不知道如何使用 Laravel 查询生成器和 Eloquent 执行此操作。谁能帮帮我?

数据库截图

试试这个: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();

您可以使用 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();

试试这个简化版本 laravel eloquent;

$some_data = YourModel::select('column_name')
            ->groupBy('column_name')
            ->orderByRaw('COUNT(*) DESC')
            ->take(5)
            ->get();