2016-06-23 8 views
0

Das wird kompliziert erklärt - aber ich werde mein Bestes geben. Below Ich habe eine Methode, um alle Aufgaben zu greifen (von einem bestimmten Team), die in einem bestimmten Zeitraum zu Benutzern zugeordnet sind ...Erhalte Aufgaben, die zwischen dem Datumsbereich liegen oder außerhalb des Datumsbereichs liegen

Gerade jetzt, es funktioniert, wie es sollte (teilweise):

  • erhalten Sie Aufgaben aus der laufenden Team
  • die

Need Aufgaben an den geauthet Benutzer zugeordnet sind, wo ...

  • Aufgabe Startdatum fällt in Datumsbereich
  • Aufgabe Fälligkeitsdatum fällt in Datumsbereich

Aber ich brauche auch Aufgaben, die das StartdatumVOR Datumsbereich sein könnte UND/ODER durch DatumkönnteNACH Datumsbereich sein.

Das funktioniert großartig. Es greift jedoch auch Aufgaben anderer Teams auf. Zum Beispiel, wenn ich zu Team 2 wechsle. Aufgaben für Team 1, die dem Benutzer zugewiesen sind, erscheinen ebenfalls (wenn sie nicht sein sollten).

Also nehme ich an, es hat etwas mit meinen where Klauseln zu tun. Es ist ein kompliziertes Biest. Hoffe, dass jemand helfen kann.

Methode:

$tasks = Team::currentTeam() 
    ->tasks() 
    ->assignedToUser() 
    ->where([ 
     ['status', '!=', 'completed'], 
     ['due_date', '<=', $start_date], 
     ['start_date', '<>', $start_date], 
     ['start_date', '<', $end_date], 
    ]) 
    ->orWhere([ 
     ['due_date', '>', $start_date] 
    ]) 
->get(); 

Aktuelles Team Scope:

public function scopeCurrentTeam($query) 
{ 
    $current_team = Auth::user()->current_team_id; 
    return $query->find($current_team); 
} 

zu Benutzerbereich zugewiesen:

public function scopeAssignedToUser($query) 
{ 
    return $query->with('user', 'comments')->whereHas('user', function($query) { 
     $query->where('user_id', Auth::user()->id); 
    })->orHas('user', '=', 0); 
} 
+0

können wir sehen, die 'scopeTasks' – Ohgodwhy

+0

es eine Beziehung ist ...' return $ this-> hasMany (Aufgabe :: Klasse); '' –

+0

assignedToUser' nicht über diese hasMany Beziehung schert. Können Sie mir zeigen, wie eine Aufgabe mit einem Benutzer zusammenhängt? – Ohgodwhy

Antwort

0

Okay, ich es herausgefunden - auf, mein Denken Mütze auf, schrieb alle möglichen Szenarien für die Abfrage aus und haben es zum Laufen gebracht.

Zuerst musste ich meine massive Liste von wheres in einem ->where(function().. so meine, wo Klassen umwickeln (wie ich hatte vorher), nicht mit meiner Beziehung (tasks()) und den assignedToUser() Umfang in Konflikt geraten.

Vielleicht gibt es einen saubereren Weg, dies zu tun? Es ist f-Kin 'hässlich ... Ich habe ein "Häkchen" für wer auch immer kann;) Ich werde wahrscheinlich einen Bereich für so lange wo schaffen und es aus meinem Controller heraus.

$tasks = Team::currentTeam() 
    ->tasks() 
    ->assignedToUser() 
    ->where(function ($query) use ($start_date, $end_date) { 
     $query->where([ 
      // Task falls on or between date range 
      ['start_date', '>=', $start_date], 
      ['start_date', '<=', $end_date], 
      ['due_date', '>=', $start_date], 
      ['due_date', '<=', $end_date] 
     ])     
     ->orWhere([ 
      // Task is overdue from previous week 
      ['start_date', '<', $start_date], 
      ['due_date', '<', $start_date], 
      ['status', '!=', 'completed'] 
     ])     
     ->orWhere([ 
      // Task start before date range 
      // and due date is past end of date range 
      ['start_date', '<', $start_date], 
      ['due_date', '>', $end_date] 
     ]) 
     ->orWhere([ 
      // Task start within date range, 
      // but due date is past end of date range 
      ['start_date', '>=', $start_date], 
      ['start_date', '<=', $end_date], 
      ['due_date', '>', $end_date] 
     ]) 
     ->orWhere([ 
      // Task due date within date range, 
      // but start date is before start of date range 
      ['due_date', '>=', $start_date], 
      ['due_date', '<=', $end_date], 
      ['start_date', '<', $start_date] 
     ]); 
    })    
->get(); 
Verwandte Themen