【问题标题】:Laravel 5 : database relation query using withLaravel 5:使用 with 的数据库关系查询
【发布时间】:2016-09-03 05:49:36
【问题描述】:

用户 -> 有很多问题 问题 -> 有很多答案

我想显示一个用户的问题信息以及每个问题的最新答案

$questions = Question::select('id','user_id',
            'title','video','status','created_at')
            ->where('user_id','=',$user->id)
            ->where('status','>=','2')
            ->with([
                'user' => function($query){
                    $query->select('id','name','picture');
                },
                'answers' => function($query){
                    $query->select('id','question_id','user_id','answer','created_at',DB::raw('count(*) as answer_count'))
                    ->orderBy('created_at','desc')->first();

                },
            ])->get();

在这里我没有得到每个问题的答案。我得到了用户提交的所有问题的答案

你能帮帮我吗?如何将问题的答案放在哪里

预期输出:

User [id, name, and so on ] -> 
question [
    ['id', 'title' ..]->Answer['id','question_id',etc ],
    ['id', 'title' ..]->Answer['id','question_id',etc ]
]

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    您需要从获取用户的问题和答案开始,而不是从问题本身开始,以获得预期的输出:

    $user = User::select('id','name','picture')->with([
                'questions' => function($query){
                    $query->select('id','user_id','title','video','status','created_at');
                    $query->where('status','>=','2');
                },
                'questions.answers' => function($query){
                    $query->select('id','question_id','user_id','answer','created_at',DB::raw('count(*) as answer_count'));
                    $query->orderBy('created_at','desc')->first();
    
                },
            ])->findOrFail($user_id);
    

    现在您应该能够通过以下方式获得给定用户提出的所有问题以及他们的最新答案:

    foreach($user->questions as $question) {
      $answer = $question->answers;
    }
    

    【讨论】:

    • 此查询仅整体显示最新答案(用户问题的最新答案)。我想要每个问题的最新答案
    • 我不确定我是否理解。上面的查询将为您提供用户对象、给定用户的所有问题以及他们每个问题的最新答案。这不是你需要的吗?
    • 是的。给定用户的所有问题以及他们每个问题的最新答案
    • 这就是上面的查询应该给你的。您如何访问数据?
    • 给定用户的所有问题以及每个问题的最新答案。不是每个用户
    【解决方案2】:
    $questions = Question::select('id','user_id','title','video','status','created_at')->with([
                'user' => function($query){
                    $query->select('id','name','picture');
                }
            ])->where('status','>=','2')->get();
    
            foreach($questions as $question)
            {
                $question_data[] = [
                    'id' => $question->id,
                    'title' => $question->title,
                    'video' => $question->video,
                    'user_id' => $question->user_id,
                    'status' => $question->status,
                    'created_at' => $question->created_at->toDateTimeString(),
                    'thumbnail' => $question->thumbnail,
                    'user' => [
                        'id' => $question->user->id,
                        'name' => $question->user->name,
                        'picture' => $question->user->picture
                    ],
                    'answers' => 
                    $question->answers()->select('video','question_id','user_id','created_at','thumbnail')
                    ->with([
                        'user' => function($query){
                            $query->select('id','name','picture');
                        }
                    ])->orderBy('created_at','desc')->first()];
            }
    

    【讨论】:

      猜你喜欢
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      相关资源
      最近更新 更多