laravel--6 eloquent查询作用域
来源:互联网 发布:愚人节整人软件 编辑:程序博客网 时间:2024/06/07 21:53
理解:查询作用域就是给查询添加条件
在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 * from
userswhere
age> 200
- 移除全局作用域
User::withoutGlobalScope(AgeScope::class)->get()
本地作用域
本地作用域允许我们定义通用的约束集合以便在应用中复用。例如,你可能经常需要获取最受欢迎的用户,要定义这样的一个作用域,只需简单在对应 Eloquent 模型方法前加上一个 scope 前缀。
eg:
<?phpnamespace 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();
阅读全文
0 0
- laravel--6 eloquent查询作用域
- Laravel Eloquent ORM 多条件查询
- Laravel Eloquent ORM--整理
- laravel Eloquent ORM
- laravel(三)Eloquent
- laravel的Eloquent模型
- Laravel Eloquent ORM--整理
- Laravel Eloquent使用小记
- laravel的Eloquent起步
- Laravel Eloquent ORM--整理
- Laravel Eloquent 模型事件
- laravel 5.5 -- Eloquent 入门
- laravel -- Eloquent 模型关联
- laravel eloquent 模型关联
- laravel的Eloquent关联关系
- laravel的Eloquent其他笔记
- Laravel基础-Eloquent ORM 模型
- laravel笔记-Eloquent ORM(基础)
- Ubuntu 16.04 蓝牙
- CountDownLatch使用场景
- 计算机网络基础(一)
- leetcode Remove Nth Node From End of List(Java)
- Form表单值为空和数据库模糊查询的处理问题
- laravel--6 eloquent查询作用域
- 关于树莓派下调用百度语音合成REST API说明
- centos6.7安装jdk7
- 金融系统中的还款日计算(自用虽然比较low)
- Ubuntu U盘装
- Maven私服Nexus3.x环境构建操作记录
- 撰写一组SNORT规则防御SQL注入
- Vuforia的学习(六)DefaultTrackableEventHandler脚本解析
- 在Fedora 25上编译SELinux Policy