【问题标题】:Advanced Laravel Query高级 Laravel 查询
【发布时间】:2020-03-15 11:40:23
【问题描述】:

这是我的架构:

User 型号正常。

Question
  - team_id
  - question_body
Answer
  - 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,但我收到了汇总错误。我猜这将需要一个子查询,但我不熟悉这些。如果有人有想法,将不胜感激。谢谢!

【问题讨论】:

    标签: sql database laravel postgresql eloquent


    【解决方案1】:

    如果我理解你想要做什么,我认为如果你从 reverse 开始,这可能是最简单的。我会使用 User 模型并从那里提取您的答案。这是一个更简单的查询。

    我不确切知道您的关系是什么,或者 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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-16
      • 2018-10-21
      • 2015-06-09
      • 2016-12-13
      • 1970-01-01
      • 2020-01-11
      • 2015-01-14
      • 2018-08-01
      相关资源
      最近更新 更多