2016-06-24 18 views
0

Also ich habe diese sehr große Suchanfrage und ich versuche auch alle Benutzer aus der Suche zu entfernen, die die Suche des Benutzers blockiert haben.Laravel 5.2 WhereNotIn Abfrage

Ich werde wirklich verwirrt und drehte mich um und würde jede Hilfe lieben.

blocked_users Die Tabelle enthält

id 
user_id 
blocked_user_id 

, wenn ein Benutzer eine andere Blöcke Benutzer eine Zeile erzeugt wird. Jetzt merke ich, wenn ein Benutzer niemanden blockiert hat, der überhaupt nicht in der Suche erscheint (meine Vermutung wegen des Joins, wenn der Benutzer nicht in der Tabelle existiert, dann werden sie nicht angezeigt?)

hier ist ein kurzer Ausschnitt aus meiner Anfrage

$query = User::join('user_profiles', 'users.id', '=','user_profiles.user_id'); 
    $query->Join('blocked_users', 'users.id', '=', 'blocked_users.user_id'); 
    $query->whereNotIn('blocked_users.blocked_user_id',[Auth::user()->id])->select('users.*','user_profiles.*'); 

EDIT

Ok, so wenn mein Benutzer-ID 1, und Benutzer 2 möchte nicht für mich, sie nicht mehr kontaktieren oder sogar zeigen in meiner Suche, Sie würden mich blockieren, die eine Zeile in einer Tabelle hinzufügen würde

int, user_id = 2, blocked_user_id = 1

Wenn ich eine Suche mache Ich möchte nicht, dass Benutzer 2 in Benutzer 1s Suche erscheint.

jedoch mit den leftJoin Keine Benutzer zeigen, wenn meine Benutzer-ID in jeder Zeile der blocked_user_id unabhängig vom Benutzer, der mich blockiert ist.

Ich bin nicht sicher, wie sonst ich visuelle Daten geben könnte. Die ganze Abfrage ist ziemlich massiv und funktioniert perfekt. Ich bin mir einfach nicht sicher, wie ich die Where-Klausel kombinieren soll.

Antwort

1

Dies könnte es tun:

$query = User::join('user_profiles', 'users.id', '=','user_profiles.user_id'); 
     $query->leftJoin('blocked_users', function ($sub_query) { 
     $sub_query->on('users.id', '=', 'blocked_users.user_id'); 
     $sub_query->where('blocked_users.blocked_user_id', '=', Auth::user()->id); 
    }); 
    $query->where('users.id', '!=', Auth::user()->id); 
    $query->whereNull('blocked_users.id'); 
    $query->select('users.*','user_profiles.*'); 
+0

Danke, ein bisschen ein Fehler. - BadMethodCallException in Builder.php Zeile 2345: Aufruf zu undefinierter Methode Illuminate \ Database \ Query \ Builder :: ID() –

+0

Danke, es funktioniert! –