首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Laravel 5.3之 Query Builder 源码解析()

实际上,上篇已经聊到Query Builder通过连接工厂类ConnectionFactory构造出了MySqlConnection实例(假设驱动driver是mysql),在该MySqlConnection...开发环境:Laravel5.3 + PHP7 数据库连接连接工厂类ConnectionFactory通过简单工厂方法实例化了MySqlConnection,看下该connection的构造函数:...版本是没有封装在闭包里而是先执行了连接操作,Laravel5.3是封装在了闭包里等着执行SQL语句再连接操作,应该是为了提高效率。..., operator, value拆解并装入wheres[ ]属性,并且wheres[ ]是一个'table'结构,如果有多个where过滤器,就在wheres[ ]按照'table'结构存储,[...总结:本文主要学习了Query Builder的数据库连接器和编译API为SQL相关源码。编译SQL细节和执行SQL的过程下篇再聊,到时见。

3.2K31

Laravel 如何实现数据的软删除

软删除功能需要实现的功能有以下几点: 1.模型执行删除操作,只标记删除,不执行真正的数据删除 2.查询的时候自动过滤已经标记为删除的数据 3.可以设置是否查询删除的数据,可以设置只查询删除的数据 4...这样就可以在查询条件添加一个全局条件。Laravel软删除数据的过滤也是使用这种方式实现的。...并在SoftDeletingScope实现查询自动过滤被删除数据,指定查询删除数据功能。...protected function performJoin(Builder $query = null) { $query = $query ?...以上就是Laravel实现软删除的大概逻辑。这里有一个细节,Laravel软删除的标记是一个时间格式的字段,默认delete_at。通过是否为null判断数据是否删除。

2.4K10

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

Arr::random($config[$type]) : $config[$type]; } 很明显,在创建连接时,make() 方法体内根据配置文件是否有...从这里我们可以看出,Laravel 是根据参数来判断是否使用从库连接进行查询的,而我之前看过其它框架的源码,是 Yii 还是 TP 什么来着,有根据查询语句是否有 SELECT 字符来判断走从库去查询的...在执行 update() 操作时,我们最后进入了 laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php 这个对象。...public function compileSelect(Builder $query) { if ($query->unions && $query->aggregate) {...当然,更复杂的东西其实还是在构造器,毕竟在语法生成这里其实是已经到了最后的拼装阶段了。有兴趣的同学可以多深入研究一下 Builder 对象关于上述功能的方法实现。

4.3K20

Laravel5.7 Eloquent ORM快速入门详解

在开始之前,确保在 config/database.php 文件配置好了数据库连接。更多关于数据库配置的信息,请查看文档。...默认情况下,所有的 Eloquent 模型使用应用配置的默认数据库连接,如果你想要为模型指定不同的连接,可以通过 $connection 属性来设置: <?...更新 save 方法还可以用于更新数据库存在的模型。要更新一个模型,应该先获取它,设置你想要更新的属性,然后调用 save 方法。...$builder, Model $model) { return $builder- where('age', ' ', 200); } } Laravel 应用默认并没有为作用域预定义文件夹...= App\User::ofType('admin')- get(); 比较模型 有时候你可能需要确定两个模型是否是一样的,is 方法可用于快速验证两个模型是否有相同的主键、数据表、以及数据库连接

15K41

Laravel5.2之Demo1——URL生成和存储

连接信息,Laravel框架为数据库连接提供了配置文件:/config/database.php,Laravel支持SQlite、MySQL、PostgreSQL、SQLSRV数据库,本教程使用MySQL...不过有时也推荐使用它的Query Builder查询构造器,实际上就是SQL语句封装的类,性能会比较高一些,个人遇到过一个场景:使用Eloquent ORM性能有点慢,导致PHP执行过长报503 Time...Out,改成Query Builder后性能高很多脚本执行很快搞定,当然各有利弊,毕竟Eloquent很强大很好用。...,写好数据库连接配置、model配置、执行migrations表迁移),再在控制器controller里写好业务逻辑,返回responseblade视图view或直接一个"hello world"字符串吧...1).使用Query Builder的where()方法,并传入Input::get('link')参数验证数据表里是否已经有该链接,并链式使用first()方法取出第一个结果: $link

24K31

Laravel学习记录--Model

public function apply(Builder $builder, Model $model) { return $builder->where('age', '>'...select 子句,需要使用 addSelect 方法来替代 select,这样就可以避免存在的 select 查询子句造成影响。...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]的好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我的另一个博客 - - - Laravel...渴求式加载多个关联关系 有时候你需要在单个操作渴求式加载多个不同的关联关系,要实现这一功能,只需添加参数到with方法即可 ,以逗号分割 ,查询文章的作者即所在栏目 嵌套的渴求式加载 要使用嵌套的渴求式加载的关联关系...通过用户表(users)这个中间表,可以使国家与文章表建立连接,因为用户表分别与国家与文章表建立了连接,即可通过用户表(users)这个媒介,可使国家与文章表建立连接 完成这个案例,我们先根据需求建表

13.4K20

Laravel源码解析之QueryBuilder

接下我们到QueryBuilder类文件 \Illuminate\Database\Query\Builder.php里看看它里面的源码 namespace Illuminate\Database\Query...\Builder $query * @return string */ public function compileSelect(Builder $query) { $original...$this->getReadPdo() : $this->getPdo(); } public function getPdo() { //如果还没有连接数据库,先调用闭包连接上数据库...通过梳理流程我们知道: Laravel是在第一次执行SQL前去连接数据库的,之所以$pdo一开始是一个闭包因为闭包会保存创建闭包时的上下文里传递给闭包的变量,这样就能延迟加载,在用到连接数据库的时候再去执行这个闭包连上数据库...在程序判断SQL是否执行成功最准确的方法是通过捕获 QueryException异常 Processor后置处理结果集 processor是用来对SQL执行结果进行后置处理的,默认的processor

1.9K50
领券