2016-09-03 4 views
1

Benutzer mit -> Hat viele Frage Frage -> Hat viele AntwortLaravel 5: Datenbank Beziehung Abfrage mit

ich einen Nutzer Fragen Informationen mit den neuesten Antwort auf jede Frage

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

hier zeigen wollen Ich habe keine Antwort für jede Frage bekommen. Ich habe die Antwort für alle Fragen vom Benutzer

können Sie mir bitte helfen? wie zu setzen, wo Fragen-ID für Antwort

Erwartete Ausgabe:

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

Antwort

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

Sie müssen sich mit Abrufen Benutzer mit ihren Fragen und die Antworten darauf beginnen, nicht mit der Fragen sich selbst, um die erwartete Ausgabe zu erhalten:

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

Nun sollten Sie in der Lage sein, alle Fragen, die von bestimmten Benutzer und die neueste Antwort auf sie mit dem folgenden gebeten zu erhalten:

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

diese Abfrage zeigt nur insgesamt die letzte Antwort (letzte Antwort auf die Frage des Benutzers). Ich möchte die neueste Antwort für jede Frage – Suba

+0

Ich bin mir nicht sicher, ob ich das verstehe. Die obige Abfrage gibt Ihnen ein Benutzerobjekt, alle Fragen eines gegebenen Benutzers und die letzte Antwort für jede Frage. Brauchst du das nicht? –

+0

ja. alle Fragen des gegebenen Benutzers und die späteste Antwort für jede ihrer Frage – Suba