Laravel - 根据出现次数获得前5名

时间:2016-05-24 08:03:29

标签: php mysql eloquent laravel-5.2

我有表评论,投票,观点,喜欢有article_id字段。我试图通过它们中出现的次数从这些表中获得前5篇文章。我正在向我的函数发送HTTPS,然后尝试从查询中获取结果。这就是我的查询现在的样子:

$modelName

现在,我得到了,这种结果:

private function query($modelName) {
        $mostSomethingArticle = $modelName->all()->groupBy('article_id')->take(5);

        return $mostSomethingArticle;

      }

我想知道如何进行查询,我会以Collection {#398 ▼ #items: array:5 [▼ 5 => Collection {#377 ▼ #items: array:5 [▶] } 2 => Collection {#376 ▼ #items: array:1 [▶] } 6 => Collection {#397 ▼ #items: array:3 [▶] } 1 => Collection {#396 ▼ #items: array:1 [▶] } 7 => Collection {#395 ▼ #items: array:5 [▶] } ] } 顺序获得出现次数的前5个结果。

2 个答案:

答案 0 :(得分:2)

我发布我的解决方法,如果有人将来需要它,而不是传递$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();

答案 1 :(得分:1)

不确定这是不是您的意思,但是如果您有一个包含import db bad_words = db.get_bad_words() 的列,您可以先按此列排序,然后获得结果:

occurrences

另请尝试:

$modelName->all()->groupBy('article_id')->sortByDesc('occurrences')->take(5);

希望这有帮助。