2017-01-21 22 views
0

$provider ist optional, ist es richtig, whereHas in diesem Szenario zu verwenden, auch wenn ich bereits with() Eager Loading verwendet habe?Wo ist der richtige Weg?

public function findByStatus($status, $provider = null) 
{ 
    $result = $this->hosts->with('logins')->where('status', $status); 

    if ($provider) { 
     $result->whereHas('logins', function ($query) use ($provider) { 
      $query->where('provider', $provider); 
     }); 
    } 

    return $result->get(); 
} 
+1

Es hängt davon ab, was Sie erreichen möchten. –

Antwort

2

Sie können es in der Art, wie Sie verwenden. Aber ich würde es so machen.

$result = $this->hosts->whereHas('logins', function ($query) use ($status, $provider) { 
    $query->where('status', $status); 
    if ($provider) { 
     $query->where('provider', $provider); 
    } 
    return $query; 
})->get(); 

Da sowohl die Lagen über logins Sie gruppieren können sie in einer Abfrage.

+0

Ich glaube, dass der 'status' Teil immer noch auf die äußere Abfrage angewendet werden sollte. – Joost

Verwandte Themen