2016-08-03 29 views
3

Ich habe mehrere Laravel-Modelle, die die gleiche Funktionalität haben.So teilen Sie Bereiche zwischen Klassen in Laravel 5

Ich versuche, eine Art von Funktionalität zu implementieren, aber mit einer anderen Logik dahinter.

Zum Beispiel: Alle meine Modelle haben eine "aktive" boolesche Flagge, was bedeutet, dass ich alle meine Sprachen wie: $language = Language::where('active', 1)->orderBy('name')->get();. Das gleiche gilt für Hobby, Semester usw.

Ich versuche, so etwas wie dies in meinem base_model aus denen alle anderen Modelle zu tun erweitern:

public static function getActive() 
{ 
    return this::where('active', 1)->orderBy('name')->get(); 
} 

dies würde mich retten viel, viel redundanten Code , aber als Neuling kämpfe ich mit dem Code.

Wie kann ich das Modell, das ich abrufen möchte, dynamisch definieren?

Irgendwelche Ideen?

Antwort

4

Sie können Laravel query scopes dafür verwenden. Zum Beispiel:

//your base model 
class BaseModel extends Model 
{ 
    //every class inheriting from this will have this scope 
    public function scopeActive($query) 
    { 
     return $query->where('active', 1)->orderBy('name')->get(); 
    } 
} 

//your child models will inherit the scope from the parent class 
class Language extends BaseModel 
{ 
    //your model's methods 
} 

//use the scope to get all the active languages 
$languages = Language::active(); 
+0

Sie suchen nach Larevel Scopes. https://laravel.com/docs/5.1/eloquent#query-scopes –

+1

Ich empfehle, ein Repository-Muster zu verwenden, um eloquente Modelle zu filtern. https://github.com/domniklDesignPatternsPHP/tree/master/More/Repository –