Laravel雄辩地说明了如何覆盖基本查询?
我有两个模型共用一张桌子 表名:books,我通过一个名为Laravel雄辩地说明了如何覆盖基本查询?,laravel,laravel-5,eloquent,overriding,query-builder,Laravel,Laravel 5,Eloquent,Overriding,Query Builder,我有两个模型共用一张桌子 表名:books,我通过一个名为type 书籍型号 class Book extends \Illuminate\Database\Eloquent\Model { protected $table = 'books'; } class Novel extends Book { protected $table = 'books'; // Is such a method available? protected function s
type
书籍型号
class Book extends \Illuminate\Database\Eloquent\Model
{
protected $table = 'books';
}
class Novel extends Book
{
protected $table = 'books';
// Is such a method available?
protected function someMethodToOverride()
{
$this->where('type', 'novel');
}
}
新颖的模型
class Book extends \Illuminate\Database\Eloquent\Model
{
protected $table = 'books';
}
class Novel extends Book
{
protected $table = 'books';
// Is such a method available?
protected function someMethodToOverride()
{
$this->where('type', 'novel');
}
}
我想在这里实现的是
$results = Novel::where('title', 'LIKE', '%' . $title . '%')->get();
从这个查询中,我希望它预先设置条件
where('type', 'novel')
是否有任何功能可以替代以实现此目的?在模型中,您可以使用范围:
public function scopeOfType($query, $type)
{
return $query->where('type', $type);
}
并在调用作用域时传递参数:
Model::ofType('novel')
->where('title', 'LIKE', '%' . $title . '%')
->get();
请参阅链接使用匿名全局作用域,并将此引导方法添加到
Novel
模型中
protected static function boot()
{
parent::boot();
static::addGlobalScope('type', function (\Illuminate\Database\Eloquent\Builder $builder) {
$builder->where('type', 'novel');
});
}
现在它将自动添加查询
$results = Novel::where('title', 'LIKE', '%' . $title . '%')->get();
现在,如果要删除给定查询的全局范围,可以
可以使用不带GlobalScope的方法
要了解更多信息,请阅读此Wow~这正是我想要的。谢谢