query scope

global scopes

1编写 2应用 3匿名 4移除

1.编写

定义一个实现 Illuminate\Database\Eloquent\Scope 接口的类,该接口要求你实现一个方法:apply。需要的话可以在 apply 方法中添加 where 条件到查询:
如 <code>return $builder->where('age',>,200);</code>

2 应用

需要重写给定模型的 boot 方法并使用 addGlobalScope 方法
AgeScope就是编写的类
<code>static::addGlobalScope(new AgeScope);</code>
添加作用域后,如果使用 User::all() 查询则会生成如下SQL语句:
<code>select * from users where age > 200</code>

3 匿名

意思是无需编写新建一个实现Scope接口的类,而是以匿名函数的方式实现
<code>
static::addGlobalScope('age', function(Builder $builder) {
$builder->where('age', '>', 200);
});
</code>
利用 age 标识符来移除全局作用
<code>User::withoutGlobalScope('age')->get();</code>

4移除

查询时加上withoutGlobalScope或者withoutGlobalScopes
对应单个或者多个查询作用域

local scopes

在模型中定义方法以scope开头,如scopeActive()
在查询的时候我们可以这样写:
<code>User::active()->all()</code>

我们也可以提供参数查询
我们scopeOftype($query,$type)里的$type就是一个动态参数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,082评论 19 139
  • 1 缓存介绍# MyBatis支持声明式数据缓存(declarative data caching)。当一条SQL...
    七寸知架构阅读 2,178评论 2 51
  • 一. Java基础部分.................................................
    wy_sure阅读 3,846评论 0 11
  • 文/青藜 炎热的六月突然冷如冰雪一般, 冷冻你健壮的身躯和柔软的心—— 层层的棉袄都裹不暖。 流淌液体正在管子里凝...
    Only青藜阅读 255评论 2 3