Laravel: orderby 计数在 pivot 上,同时用关键字过滤父级
Laravel: orderby count on pivot while filtering parent with keyword
大家早上好,
我有两个 table、users
、questions
和一个枢轴 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();
大家早上好,
我有两个 table、users
、questions
和一个枢轴 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();