2016-04-18 4 views
0

Ich frage eine Tabelle ab, die alle Aufgaben findet, die einem bestimmten Benutzer zugewiesen sind (der angemeldete Benutzer).Eloquent Pivot-Tabelle für alle Benutzer abfragen - und auch Datensätze ohne Benutzer einschließen

Ich habe eine Pivot-Tabelle für die Aufgaben/Benutzer-Beziehung, da mehr als ein Benutzer einer Aufgabe zugewiesen werden kann. Die folgende Funktion ergreift erfolgreich alle Tasks, die dem Benutzer zugewiesen sind. Kein Problem dort.

jedoch, ich möchte auch Aufgaben enthalten, die keine Benutzer in der Funktion unten zugewiesen wurden (in meiner Plattform, keine zu einer Aufgabe zugeordneten Benutzer bedeutet es für „Jedermann“ ist).

$user_tasks = Team::currentTeam()->tasks()->with('user', 'comments')->whereHas('user', function($query) { 
    $query->where('user_id', Auth::user()->id); 
})->get(); 

Antwort

1

Wahrscheinlich so etwas wie dies funktionieren sollte:

$user_tasks = Team::currentTeam()->tasks()->with('user', 'comments')->whereHas('user', function($query) { 
    $query->where('user_id', Auth::user()->id); 
})->doesntHave('user','or')->get(); 

, weil es keine Funktion orDoesntHave ist. Es gibt nur:

public function doesntHave($relation, $boolean = 'and', Closure $callback = null) 
{ 
    return $this->has($relation, '<', 1, $boolean, $callback); 
} 

definiert, so müssen Sie doesntHave verwenden und Operator als zweites Argument angeben.

+0

Dank. Was ist das 'oder' und Standard 'und' $ boolean? –

+1

@MikeBarwick Dies ist ein Operator, der beim Generieren einer Abfrage verwendet wird - Sie können entweder "A und B" in der SQL-Abfrage oder "A oder B" haben –

0

Sie können separat die nicht zugewiesenen Aufgaben erhalten:

$unassigned_tasks = Task::unassigned()->get(); // Uses a scope that says where user_id is null 

Und dann so etwas wie:

$user_tasks->tasks->push($unassigned_tasks); 
Verwandte Themen