laravel--6 eloquent查询作用域
2017-06-20 18:02
281 查看
理解:查询作用域就是
全局作用域:添加作用域后如果使用
本地作用域:给Model类中的方法
eg:
应用全局作用域(要将全局作用域分配给模型,需要重写给定模型的 boot 方法并使用 addGlobalScope 方法)
添加作用域后,如果使用 User::all() 查询则会生成如下 SQL 语句
移除全局作用域
eg:
作用域被定义好了之后,就可以在查询模型的时候调用作用域方法,但调用时不需要加上 scope 前缀,你甚至可以同时调用多个作用域,例如:
给查询添加条件在
where语句中自动添加一些条件限制
全局作用域:添加作用域后如果使用
PhotoModel::all() PhotoModel::get()则会在SQL语句中增加条件限制
本地作用域:给Model类中的方法
where条件限制
全局作用域
首先定义一个实现Illuminate\Database\Eloquent\Scope接口的类,该接口需要实现
apply方法
eg:
<?php namespace App\Scopes; use Illuminate\Database\Eloquent\Scope; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class AgeScope implements Scope{ public function apply(Builder $builder, Model $model) { return $builder->where('age', '>', 200); } }
应用全局作用域(要将全局作用域分配给模型,需要重写给定模型的 boot 方法并使用 addGlobalScope 方法)
<?php namespace App; use App\Scopes\AgeScope; use Illuminate\Database\Eloquent\Model; class User extends Model{ protected static function boot(){ parent::boot(); static::addGlobalScope(new AgeScope); } }
添加作用域后,如果使用 User::all() 查询则会生成如下 SQL 语句
select * fromusers
whereage
> 200
移除全局作用域
User::withoutGlobalScope(AgeScope::class)->get()
本地作用域
本地作用域允许我们定义通用的约束集合以便在应用中复用。例如,你可能经常需要获取最受欢迎的用户,要定义这样的一个作用域,只需简单在对应 Eloquent 模型方法前加上一个 scope 前缀。eg:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * 只包含活跃用户的查询作用域 * * @return \Illuminate\Database\Eloquent\Builder */ public function scopePopular($query) { return $query->where('votes', '>', 100); } /** * 只包含激活用户的查询作用域 * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeActive($query) { return $query->where('active', 1); } }
作用域被定义好了之后,就可以在查询模型的时候调用作用域方法,但调用时不需要加上 scope 前缀,你甚至可以同时调用多个作用域,例如:
$users = App\User::popular()->active()->orderBy('created_at')->get();
相关文章推荐
- Laravel Eloquent模型分组查询并返回每个分组的数量 groupBy()
- Laravel5 Eloquent ORM 查询
- Laravel Eloquent ORM 时如何查询表中指定的字段
- laravel中把查询数据库的sql写入日志中
- laravel中的关联查询with问题
- laravel查询数据库,对反馈回来的object类型,判断是否存在数据
- 深入理解 Laravel Eloquent(一)——基本概念及用法
- laravel的Eloquent关联关系
- laravel 5.4 查询构建器
- Laravel5.1学习笔记22 Eloquent 调整修改
- Laravel5.3中的原生+查询构造器+Eloquent ORM 常用整理
- Laravel Eloquent – 快速复制数据
- Laravel 在 with 查询中只查询个别字段
- Laravel 多条件模糊查询
- laravel 查询数据库first()返回的数据转数组
- 5 个 Laravel Eloquent 小技巧
- 5 个 Laravel Eloquent 小技巧
- Laravel Eloquent 的条件不等于
- laravel 多条件查询用法
- laravel Eloquent 增删改查结果