如何在Laravel 5中的类之间共享范围

时间:2016-08-03 16:52:56

标签: php laravel oop laravel-5

我有几个具有相同功能的Laravel模型。

我试图实现某种::All()功能,但背后有另一种逻辑。

例如:我的所有模特都有一个" Active"布尔标志,这意味着我得到了所有语言,如:$language = Language::where('active', 1)->orderBy('name')->get();。爱好,学期等也是如此。

我试图在我的base_model中做这样的事情,其他所有模型都扩展了:

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

这会为我节省大量冗余代码,但作为一个新手,我正在努力解决这些问题。

如何动态定义我想要检索的模型?

有什么想法吗?

1 个答案:

答案 0 :(得分: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();