2017-09-05 76 views
0

tables to join Mysql avancée se joint à Laravel 5,2

j'ai trois tables: messages, commentaires et réponses

  • Réponses tables est la même que la table de poste, mais sa réponse au poste
  • messages table ont commentaires
  • Le tableau des réponses ont aussi des commentaires
  • La table des commentaires est pour stocker les commentaires des réponses table et messages tableaux
  • Je souhaite obtenir tous les messages qui ont des commentaires, même si la réponse d'un poste ont également commentaire alors ce poste est inclus, et les messages qui en résultent doivent être uniques ...

C'est ce que j'ai essayé ::

$RC = DB::table('comments') 
    ->join('replies','comments.reply_id','=','replies.id') 
    ->where('comments.handle',$request->handle) 
    ->where('replies.handle','!=',$request->handle) 
    ->groupBy('replies.post_id') 
    ->get(['replies.post_id']); 

$PC = DB::table('comments') 
    ->join('posts', 'comments.post_id', '=', 'posts.id') 
    ->where('comments.handle',$request->handle) 
    ->where('posts.handle','!=',$request->handle) 
    ->groupBy('comments.post_id') 
    ->get(['comments.post_id']); 
+0

Qu'avez-vous mis en œuvre pour cela? –

+0

Lisez la documentation officielle: https://laravel.com/docs/5.2/eloquent-relationships et montrez-nous ce que vous avez fait à ce sujet – SUB0DH

+0

@ShaunakShukla J'ai posté ce que j'ai essayé – BCPNAYAK

Répondre

0

Enfin, je suis en utilisant ce code pour obtenir les résultats souhaités

$res = DB::select("SELECT posts.* FROM posts JOIN replies ON posts.id = replies.post_id 
        JOIN comments ON posts.id = comments.post_id OR replies.id = comments.reply_id 
        WHERE comments.handle = $request->handle AND posts.handle != $request->handle 
        GROUP BY posts.id"); 

$res1 = DB::table('posts') 
    ->join('comments',function ($join){ 
     $join->on('posts.id','=','comments.post_id') 
      ->where('comments.handle','=',$request->handle) 
      ->Where('posts.handle','<>',$request->handle); 
    }) 
    ->groupBy('posts.id') 
    ->get(['posts.*']); 
$results = array_merge($res,$res1); 
$results= collect($results); 
$results = $results->unique();