2016-09-01 5 views
0

ich habe ein Problem machen Laravel query:Laravel Query Builder Gruppierung

Ich möchte zum Beispiel:

SELECT * FROM USERS WHERE (a = b) or (b = a) 

ich diese haben aber funktioniert nicht:

 

    $user = Auth::user(); 
    $id_user = $user->id; 
    $message = DB::table('message') 
    ->where('sender_id', '=', $user->id) 
    ->where('reciver_id', '=', $id) 
    ->orWhere(function($query) use ($id,$id_user){ 
     $query-->where('sender_id', '=', $id) 
     ->where('reciver_id', '=', $id_user); 
    }) 
    ->join('users', function ($join) { 
     $join->on('users.id', '=', 'message.sender_id')->orWhere('users.id', '=', 'message.reciver_id'); 
    })->select('users.*', 'message.topic', 'message.message', 'message.read', 'message.created_at as date') 
    ->orderBy('date')->get(); 

    return $message; 

+0

Was * genau * funktioniert nicht? – lesssugar

+0

Können Sie näher erläutern, wie Ihr Code "nicht funktioniert"? Was hast du erwartet und was ist eigentlich passiert? Wenn Sie eine Ausnahme/einen Fehler erhalten haben, geben Sie die Zeile, auf der sie aufgetreten ist, und die Ausnahme-/Fehlerdetails an. Bitte [bearbeiten] Sie diese Details oder wir können Ihnen möglicherweise nicht weiterhelfen. – FrankerZ

Antwort

1

Sie sollten Nest der zuerst zwei in einem neuen. Siehe Code unten:

$message = DB::table('message') 
     ->where(function($query) use ($id,$id_user){ 
      $query->where('sender_id', '=', $id_user) 
       ->where('reciver_id', '=', $id); 
     }) 
     ->orWhere(function($query) use ($id,$id_user){ 
      $query->where('sender_id', '=', $id) 
       ->where('reciver_id', '=', $id_user); 
     }) 
     ->join('users', function ($join) { 
      $join->on('users.id', '=', 'message.sender_id')->orWhere('users.id', '=', 'message.reciver_id'); 
     })->select('users.*', 'message.topic', 'message.message', 'message.read', 'message.created_at as date') 
     ->orderBy('date')->get();