Laravel: orderby 计数在 pivot 上,同时用关键字过滤父级

Laravel: orderby count on pivot while filtering parent with keyword

大家早上好,

我有两个 table、usersquestions 和一个枢轴 table users_questions。一个问题属于许多用户。一位用户有很多问题。

users
-----
id | name

questions
---------
id | description

users_questions
---------------
user_id | question_id

我想获取针对特定关键字提问最多的前 3 位用户。

要在问题中搜索关键字,我使用 simple filter package。代码如下所示:

Questions::with('user')
        ->filter()
        ->paginate();

为了在不过滤任何东西的情况下得到问得最多的 3 个用户,我写了这段代码:

UsersQuestions::with('user')
            ->select('mep_id')
            ->selectRaw('COUNT(*) AS count')
            ->groupBy('user_id')
            ->orderByDesc('count')
            ->limit(3)
            ->get();

但我不知道如何将这两个请求“混合”在一起。

我能够通过执行两个查询获得我想要的结果:首先获得正确的结果,然后通过使用之前的 ID 过滤数据透视表 table。

这是一种方法,但我不确定这是最好的方法。

$questions = Questions::with('users')
                ->filter()
                ->pluck('id')
                ->toArray();

return QuestionsUsers::with('users')
            ->whereIn('question_id', $questions)
            ->select('user_id')
            ->selectRaw('COUNT(*) AS count')
            ->groupBy('user_id')
            ->orderByDesc('count')
            ->limit(3)
            ->get();