2017-01-02 2 views
1

Ich verkette zwei Bereiche. Ich erwarte, dass das Modell nur mit Zeilen zurückkommt, die die Einschränkungen in BEIDE Bereichen erfüllen.Laravel 5.3 Scope-Kette funktioniert nicht wie erwartet

public function scopeHasImages() { 
    return $this->has('images'); 
} 

public function scopeCompleted() { 
    return $this->where('status', 'complete'); 
} 

und dann verwende ich

Subject::completed()->hasImages()->limit(100)->get()[0]->status; 

leider Ergebnis ist "pending"

nur die Dinge klar zu machen, das funktioniert:

Subject::completed()->limit(100)->get()[0]->status; 

Ergebnis ist "vollständig"

Antwort

1

Ändern Ihre Local Scopes eine \Illuminate\Database\Eloquent\Builder Instanz zurückzugeben:

public function scopeHasImages($query) 
{ 
    return $query->has('images'); 
} 

public function scopeCompleted($query) 
{ 
    return $query->where('status', 'complete'); 
} 

Und dann die Bereiche Verkettungs funktioniert:

Subject::completed()->hasImages()->limit(100)->get(); 
+0

Ahhhhh, so einfach. Es ist genau das, was der Doc auch sagt. Vielen Dank. – NiRR

Verwandte Themen