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

Laravel 5.3之 Query Builder 源码解析()

,是在后续执行SQL语句时调用Connection::select()执行的,之前的Laravel版本是没有封装在闭包里而是先执行了连接操作,Laravel5.3是封装在了闭包里等着执行SQL语句再连接操作...Grammar将会把Query Builder的fluent api编译成SQL,PDO编译执行该SQL语句得到结果集results,Processor将会处理该结果集results。...Builder对象 return $this; } 从Builderwhere('id', '=', 1)的源码可看出,重点就是把where()的变量值按照column..., operator, value拆解并装入wheres[ ]属性,并且wheres[ ]是一个'table'结构,如果有多个where过滤器,就在wheres[ ]按照'table'结构存储,[...总结:本文主要学习了Query Builder的数据库连接器和编译API为SQL相关源码。编译SQL细节和执行SQL的过程下篇再聊,到时见。

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

Api 开发之include机制

概述 include英译:包含,包括,使成为...的一部分 我们在进行API开发时可能会将数据以及与该数据相关的数据全部发送给客户端, 文章数据,相关的数据有“用户”,“分类”......TopicResource::collection($topics); } 返回的结果 可以看到,除了返回文章相关数据外,还返回了用户相关数据 这样做不太友好,因为我们不知道客户端是否需要某些数据,这里的...通过laravel第三方扩展包 spatie/laravel-query-builder 官方文档:https://docs.spatie.be/laravel-query-builder/v2/introduction.../ 1.composer 引入 composer require spatie/laravel-query-builder 2.控制器使用 use Spatie\QueryBuilder\QueryBuilder...AllowedFilter::scope('withOrder')->default('recentReplied'), ]); } } 控制器使用依赖注入

1.3K10

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

不过有时也推荐使用它的Query Builder查询构造器,实际上就是SQL语句封装的类,性能会比较高一些,个人遇到过一个场景:使用Eloquent ORM性能有点慢,导致PHP执行过长报503 Time...Out,改成Query Builder后性能高很多脚本执行很快搞定,当然各有利弊,毕竟Eloquent很强大很好用。...这里注意下:如果不写table变量,laravel会自动根据model名字复数来找数据表,这个model名字是link,那就找links表。...4、保存数据进入数据库 写好视图表单后,再就是写表单的提交路由及其控制器逻辑,在控制器引用创建好的Link这个Model往links数据表里存数据。...,写好数据库连接配置、model配置、执行migrations表迁移),再在控制器controller里写好业务逻辑,返回responseblade视图view或直接一个"hello world"字符串吧

24.1K31

Laravel框架关键技术解析

query()方法(new static)->newQuery(); F.Laravel中使用的其他新特性 1.trait 优先级:当前类的方法会覆盖trait的方法,trait的方法会覆盖基类的方法...trait可以用静态方法和静态变量 trait也可以定义属性 2.简化的三元运算符: PHP5.3起,三元运算符可以省略中间,$value=exp1?.../控制器方法名/路由参数”,/home/index/xiaoming,会找到HomeController的getIndex($name)方法,anyIndex可以不限制请求方式,驼峰名方法getHomeIndex...\Query\Grammars SQL语句执行阶段,Illuminate\Database\Connection C.Eloquent ORM 1.两个阶段 Eloquent ORM查询构造器的生成,Illuminate...\Database\Eloquent\Model::newQuery() 操作命令的执行,Illuminate\Database\Eloquent\Builder 2.ORM映射最大的好处是将数据表的结构映射成一个类对象

11.9K20

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

laravel模型为我们提供了一层数据库操作层,将数据交互独立出来。 但是久而久之,随着项目的需求不断扩大,最常用的查询操作,同样会有大量的冗余代码。...全局作用域 假设有些数据库查询操作,无论是在控制器内,或者在模板文件内,或者命令行方法内,都有重复的使用需求,要是在模型内有一个公用的方法,默认就加上这些筛选条件,就可以显著减少代码量了。...$builder) { $builder->where('published', '=', 1); }); } 这样SQL语句 where published = 1 就会追加到所有的模型查询方法内...而声明一个本地作用域,只要遵循laravel的语法规定即可,如下示例: public function scopePublished($query) { return $query->where('published...我们再声明一个本地作用域方法: public function scopeAttendees($query, $maximum) { return $query->where('max_attendees

1.4K22

Laravel系列4.4】模型Eloquent ORM的使用(二)

这个 toArray() 并不是 Builder 的方法,如果不加这个 toArray() ,返回的是什么大家有没有注意过?...除了直接绑定路由外,通过控制器实现也是一样的,我们只需要将回调函数变成指定的控制器方法即可。...在所有模型都要继承的 laravel/framework/src/Illuminate/Database/Eloquent/Model.php 类,我们很快就能发现一个 query() 静态方法。...而不是我们之前 查询构造器 laravel/framework/src/Illuminate/Database/Query/Builder.php 对象。...但 Eloquent\Builder 的内部持有的一个query 属性依然是 Query\Builder 对象,也就是说在底层,它依然是调用的我们熟悉的那个 查询构造器 来进行工作的。

2.8K20

Laravel5.2之模型关联预加载

说明:本文主要说明Laravel Eloquent的延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查询次数。同时,会将开发过程的一些截图和代码黏上去,提高阅读效率。...、包含店铺商家信息姓名和电话、包含拥有的商品信息介绍和价格。...\Query\Builder|\App\Shop whereMerchantId($value) * @method static \Illuminate\Database\Query\Builder...可以看到,执行了121次query,耗时38.89ms,效率很低,仔细观察每一个statement就发现这是先扫描shops表,再根据shops每一个merchant_id去查找merchants...发现:只有4个query,耗时3.58ms,效率提高很多。把原来的N+1这种query改造成了where..in..这种query,效率提高不少。可以用EXPLAIN来查看SQL语句的执行计划。

2.5K41

Laravel源码解析之Model

根据单一责任开发原则来讲,在laravel的开发过程每个表都应建立一个model对外服务和调用。...这个文件在你项目目录的 vendor/laravel/framework/src/Illuminate/Database/Query 下,你可以自行去查看。...DB facade 正常情况下你可能会这样写一个操作 DB::table('user')->get(); 这个操作首先经过laravel的门面指向文件,不过它并不在 app.php ,而是通过内核直接加载...new Builder($query); } 最后我们到了 Illuminate\Database\Eloquent\Builder 文件下,这个类涵盖了ORM的基本操作,例如find , findOrFail...如果你在代码用到了get方法,抱歉,这里没有,它依旧会通过__call 方法将你的请求转发到 Illuminate\Database\Query\Builder $this->query->{$method

1.1K30

Laravel 如何实现数据的软删除

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

2.4K10
领券