这是我的模式:
User模型是正常的。
Question
- team_id
- question_bodyAnswer
- user_id
- question_id
- order
- is_private用户可以对一个问题有一个primary答案,这个问题本质上是order最低且是公开的答案。
除了经过身份验证的用户之外,我需要为每个用户获得一个问题的主要答案。我尝试过多种方法,但似乎想不出来。下面是我到目前为止对Question模型所做的介绍:
public function topAnswerForEachMember()
{
return $this->load(['answers' => function($query) {
return $query->public()
->where('user_id', '!=', Auth::user()->getKey());
}]);
}这将返回不属于auth用户的问题的所有公共答案。现在,我需要从每个用户那里得到订单最低的一个。我已经尝试过groupBy,但由于这个原因,我得到了聚合错误。我猜这将需要一个子查询的类型,但我不熟悉这些。如果有人有主意的话,我们会非常感激的。谢谢!
发布于 2019-11-19 21:44:07
如果我明白你想做什么,我认为如果你从相反的角度来做,这可能是最简单的。我将使用用户模型,并从那里提取您的答案。这是一个简单的查询。
我不知道您的关系到底是什么,也不知道public()方法是做什么的,但是这样的东西应该接近您的意图:
$users = User::whereHas('answers', function($query) use($question_id){
$query->where('question_id', $question_id)
->orderBy('order', 'asc')->first();
})
->where('id', "!=", Auth::user()->id)
->get();从这里开始,集合中的每个user都应该有一个排序最低的answer到您正在查看的question。如果你也想得到一个以上的答案,你可以用limit()代替first()。
https://stackoverflow.com/questions/58942748
复制相似问题