我有几个具有相同功能的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();
}
这会为我节省大量冗余代码,但作为一个新手,我正在努力解决这些问题。
如何动态定义我想要检索的模型?
有什么想法吗?
答案 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();