首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高级Laravel查询

问高级Laravel查询
EN

Stack Overflow用户
提问于 2019-11-19 21:03:32
回答 1查看 53关注 0票数 2

这是我的模式:

User模型是正常的。

代码语言:javascript
复制
Question
  - team_id
  - question_body
代码语言:javascript
复制
Answer
  - user_id
  - question_id
  - order
  - is_private

用户可以对一个问题有一个primary答案,这个问题本质上是order最低且是公开的答案。

除了经过身份验证的用户之外,我需要为每个用户获得一个问题的主要答案。我尝试过多种方法,但似乎想不出来。下面是我到目前为止对Question模型所做的介绍:

代码语言:javascript
复制
public function topAnswerForEachMember()
{
    return $this->load(['answers' => function($query) {
        return $query->public()
            ->where('user_id', '!=', Auth::user()->getKey());
    }]);
}

这将返回不属于auth用户的问题的所有公共答案。现在,我需要从每个用户那里得到订单最低的一个。我已经尝试过groupBy,但由于这个原因,我得到了聚合错误。我猜这将需要一个子查询的类型,但我不熟悉这些。如果有人有主意的话,我们会非常感激的。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-19 21:44:07

如果我明白你想做什么,我认为如果你从相反的角度来做,这可能是最简单的。我将使用用户模型,并从那里提取您的答案。这是一个简单的查询。

我不知道您的关系到底是什么,也不知道public()方法是做什么的,但是这样的东西应该接近您的意图:

代码语言:javascript
复制
$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()。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58942748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档