2016-08-03 7 views
3

同じ機能を持つ複数のLaravelモデルがあります。Laravelでクラス間でスコープを共有する方法5

::All()の機能性を実装しようとしていますが、その背後に別のロジックがあります。

たとえば、すべてのモデルに「アクティブ」ブール値フラグが設定されています。つまり、すべての言語が$language = Language::where('active', 1)->orderBy('name')->get();のようになります。同じことが、私は他のすべてのモデルが延びるから私のbase_modelでこのような何かをしようとしているなど

趣味、学期、のために行く:

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

これは私の冗長コードのとてもたくさんを救いますしかし、初心者としてはコードに苦労しています。

検索するモデ​​ルを動的に定義するにはどうすればよいですか?

アイデア?

答えて

4

これにはLaravel query scopesを使用できます。例:

//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

あなたはLarevel Scopesを探しています。 https://laravel.com/docs/5.1/eloquent#query-scopes –

+1

雄弁なモデルをフィルタリングするためにリポジトリパターンを使用することをお勧めします。 https://github.com/domnikl/DesignPatternsPHP/tree/master/More/Repository –

関連する問題