2016-09-03 46 views
1

用户使用数据库关系查询 - >有许多问题 问题 - >有许多答案Laravel 5:

我想表明与最新回答一个用户的问题信息,对每个问题

$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(); 

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

你能帮助我吗?如何把哪里的问题ID为答案

预期输出:

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

enter image description hereenter image description here

回答

0
$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()]; 
     } 
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; 
} 
+0

此查询只显示总体最新的应答(最新回答用户的问题)。我想为每个问题提供最新的答案 – Suba

+0

我不确定我的理解。上面的查询将为您提供用户对象,给定用户的所有问题以及他们每个问题的最新答案。这不是你需要的吗? –

+0

是的。给定用户的所有问题和他们每个问题的最新答案 – Suba