模型增加统一查询

模型增加统一查询,每次查询都要加入固定的查询,比如

where('status', Page::STATUS_PRIVATE);

在需要的模型内增加如下方法:增加你所需要增加的查询,这样子使用该模型查询的时候,会统一增加该查询,如下示例就是在模型查询中只查询出 status 为下架状态。

public function registerGlobalScopes($builder)
    {
        foreach ($this->getGlobalScopes() as $identifier => $scope) {
            $builder->withGlobalScope($identifier, $scope);
        }
//这里就可以随便添加统一的条件了
        $builder->where('status', Page::STATUS_PRIVATE);
        return $builder;
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
chowjiawei
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
 protected static function boot()
 {
     parent::boot();
     static::addGlobalScope(new DefaultStatusScope());
 }


 class DefaultStatusScope implements Scope
 {
    public function apply(Builder $builder, Model $model) {
      $builder->where('status', Page::STATUS_PRIVATE);
    } 
 }
2年前 评论
chowjiawei (楼主) 2年前
luyang (作者) 2年前
chowjiawei (楼主) 2年前

为了这一个模型 在加个文件 有点累吧

全局作用域也是支持匿名的

举个例子,假设未来的某一天,我来接手你的项目,需要增加新模型,但是表里不存在status字段导致报错,我看了文档之后,我第一个去找的,是去找是不是模型添加了全局或者局部作用域,而不是你这个自己实现的统一查询的方法

2年前 评论
chowjiawei (楼主) 2年前
chowjiawei (楼主) 2年前
MArtian 2年前
chowjiawei (楼主) 2年前
pigzzz (作者) 2年前
MArtian 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!