就是给每次的查询获取sql,添加固定的过滤条件。主要,需要给添加的字段添加表前缀。使用模型的公有方法getTable方法获取表名
尽量让某些固有的表字段名称统一,比如是否删除的字段,等。这样就可以使用统一的方式处理。
比如1中提到的对is_delete字段定义了模型全局作用域,假设is_delete每张表都有的话,那么我们可以再次重写模型类。让表的模型继承重写的基类
/** * 重写模型基类 */ use Illuminate\Database\Eloquent\Model; // 根据具体的空间作用域引入FilterDeleteScope use FilterDeleteScop; class BaseModel extends Model { protected static function booted() { // 调用父类的方法 parent::booted(); // 添加全局作用域 static::addGlobalScope(new FilterDeleteScope); // ... 其他的全局作用域 } } class User extends BaseModel { // 这样使用,User模型查询时,就自带过滤is_delete条件了 }取消所有的全局作用域
$userBuilder = User::withoutGlobalScopes(); // 然后使用$userBilder进行下面的查询逻辑,当然也可以在一行写完所有的取消部分全局作用域
$userBuilder = User::withoutGlobalScopes([FilterDeleteScpoe::class, ...]); // 然后使用$userBilder进行下面的查询逻辑,当然也可以在一行写完所有的 // 如果只取消一个的话,则不需要[]其他的方式参考官方文档即可,比如闭包的方式,动态方式等