首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

跟我一起学Laravel-EloquentORM高级部分

软删除功能实际上就是利用了全局作用域功能 实现一个全局作用域功能只需要定义一个实现Illuminate\Database\Eloquent\Scope接口类,该接口只有一个方法apply,方法中增加查询需要约束...$model) { return $builder->where('age', '>', 200); } } 模型中,需要覆盖其boot方法方法中增加addGlobalScope...本地作用域只对部分查询添加约束,需要手动指定是否添加约束,模型中添加约束方法,使用前缀scope <?...$query) { return $query->where('active', 1); } } 使用上述添加本地约束查询,只需要在查询中使用scope前缀方法,去掉...Mutators Eloquent模型中,Accessor和Mutator可以用来模型属性进行处理,比如我们希望存储到表中密码字段要经过加密才行,我们可以使用Laravel加密工具自动它进行加密

1.2K40
您找到你想要的搜索结果了吗?
是的
没有找到

【Laravel系列4.5】主从库配置和语法生成

然后顺着贴出代码,可以一路看到就是如果有read 配置,那么就会先使用 write 配置创建一个主连接,接着调用这个主连接 setReadPdo() 方法并根据 read 配置又创建了一个从数据库连接...执行 update() 操作时,我们最后进入了 laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php 这个对象中。... Builder 中,get() 方法调用一个 runSelect() 方法,这个方法里面会再调用一个 toSql() 方法,就是获得原始查询语句方法。...这一个循环是干嘛?其实,从代码中我们可以看,它在遍历一个本地属性 selectComponents ,并根据这个属性里面的内容去调用自身这些方法。...当然,更复杂东西其实还是构造器中,毕竟在语法生成这里其实是已经到了最后拼装阶段了。有兴趣同学可以多深入研究一下 Builder 对象中关于上述功能方法实现。

4.3K20

orm 系列 之 Eloquent演化历程2

数据库管理相关代码都放在Schema目录下, 最开始结构如下: src/Illuminate/Database/Schema ├── Blueprint.php └── Builder.php 就两个文件...grammarcompileCommand函数,此处我们调用是compileCreate函数,至此我们就分析完了数据库表操作方法,下面我们来看migrations功能。...当我们命令行中执行php artisan command时候,会去调用migrateCommand,然后最后会调用Migrator中函数runMigrations函数,看下面分析: public...,不断去系统做解耦工作 新增功能 我们接着本篇开头介绍migrate功能,来看下v1.1.0版本中有的功能, src/Illuminate/Database/Console ├── Migrations...我们通过一个比较有意思命令Make来看下migration实现,make作用是新建一个migration文件,其会根据命令函数参数,去读取src/Illuminate/Database/Migrations

2.4K30

3分钟短文:Laravel模型作用域,为你“节省”更多代码

全局作用域 假设有些数据库查询操作,无论是控制器内,或者模板文件内,或者命令行方法内,都有重复使用需求,要是模型内有一个公用方法,默认就加上这些筛选条件,就可以显著减少代码量了。...模型文件 Event 内头部引入下述类: use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder...所以,本地作用域 应运而生,专门用于某个模型文件方法,手动调用时候就起作用,不调用就不会主动追加。...既然本地作用域返回是 QueryBuilder 实例,那么自然就可以链式调用本地作用域方法,和 QueryBuilder 方法。...讲述了两个方法: 全局作用域:全局起作用,需要手动移除; 本地作用域:只有手动调用起作用,可链式使用; 这样设计模式可以很大程度上节约查询代码,但是对于维护,需要同等熟悉开发者彼此遵循开发规范,写出可维护代码

1.4K22

Laravel源码分析之模型关联

使用模型关联给应用开发带来收益认为有以下几点 主体数据和关联数据之间关系代码表现上更明显易懂让人一眼就能明白数据间关系。...、两个模型关联字段和约束,此外还设置了关联名称,Model belongsTo方法里如果未提供后面的参数会通过debug_backtrace 获取调用方法名作为关联名称进而猜测出子模型外键名称...'id' // 用户表本地键... ); } } /** * 定义一个远层一多关联,返回HasManyThrough实例 * @return \Illuminate\Database...,会调用与属性名相同关联方法,拿到关联实例后会去调用关联实例 getResults方法返回关联模型数据。...*注: 下面的代码为了阅读方便把一些父类里定义方法拿到了HasMany中,自己阅读时如果找不到请去父类中找一下。

9.5K10

Laravel 学习笔记5.3之 Query Builder 源码解析(下)

实际上,上一篇聊到了\Illuminate\Database\Query\Builder这个非常重要类,这个类含有三个主要武器:MySqlConnection, MySqlGrammar, MySqlProcessor...MySqlConnection主要就是执行SQL时做连接MySql数据库操作,MySqlProcessor主要就是用来执行SQL后数据集做后置处理操作,这两点已经之前上篇聊过,那MySqlGrammar...$this->compileUnions($query); } return $sql; } 这里首先会调用Illuminate\Database\Query\...OK, 总的来说,通过了解Query Builder实现原理后,知道其并不复杂或神秘,只是一个PDO更友好封装包裹,Query Builder有几个重要类或概念:连接类MySqlConnection...OK, illuminate/database package不仅提供了Query Builder,还提供了Eloquent ORM。

1.3K51
领券