Laravel 8 编写全局作用域
编写全局作用域很简单。定义一个实现 Illuminate\Database\Eloquent\Scope
接口的类,并实现 apply
这个方法。根据你的需求,在 apply
方法中加入查询的 where
条件:
<?php
namespace App\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
class AgeScope implements Scope
{
/**
* 把约束加到 Eloquent 查询构造中
*
* @param \Illuminate\Database\Eloquent\Builder $builder
* @param \Illuminate\Database\Eloquent\Model $model
* @return void
*/
public function apply(Builder $builder, Model $model)
{
$builder->where('age', '>', 200);
}
}
技巧:如果你需要在 select 语句里添加字段,应使用
addSelect
方法,而不是select
方法。这将有效防止无意中替换现有 select 语句的情况。