Laravel - 按出现次数获取前 5 名

Mar*_*rco 3 php mysql eloquent laravel-5

我有表评论、投票、观点、喜欢,其中有article_id 字段。我试图根据这些表中出现的次数获取前 5 篇文章。我正在发送$modelName到我的函数,然后尝试从查询中获取结果。这就是我的查询现在的样子:

\n\n
private function query($modelName) {\n        $mostSomethingArticle = $modelName->all()->groupBy('article_id')->take(5);\n\n        return $mostSomethingArticle;\n\n      }\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,我得到这样的结果:

\n\n
Collection {#398 \xe2\x96\xbc\n  #items: array:5 [\xe2\x96\xbc\n    5 => Collection {#377 \xe2\x96\xbc\n      #items: array:5 [\xe2\x96\xb6]\n    }\n    2 => Collection {#376 \xe2\x96\xbc\n      #items: array:1 [\xe2\x96\xb6]\n    }\n    6 => Collection {#397 \xe2\x96\xbc\n      #items: array:3 [\xe2\x96\xb6]\n    }\n    1 => Collection {#396 \xe2\x96\xbc\n      #items: array:1 [\xe2\x96\xb6]\n    }\n    7 => Collection {#395 \xe2\x96\xbc\n      #items: array:5 [\xe2\x96\xb6]\n    }\n  ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想知道如何进行查询,以获取前 5 个结果以及按顺序出现的次数'desc'

\n

Mar*_*rco 5

如果将来有人需要它,我将发布我的解决方法,而不是传递 a $modelName,我决定从 $request 获取表的名称,然后执行如下查询:

$result = DB::table($request['option'])
                ->select(DB::raw('article_id'), DB::raw('count(*) as count'))
                ->groupBy('article_id')
                ->orderBy('count', 'desc')
                ->take(5)
                ->get();
Run Code Online (Sandbox Code Playgroud)