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

Laravel源码解析之QueryBuilder

Connector数据库连接器闭包外 (就是参数里 $pdo, 他一个闭包,具体值在下面和上篇文章中都有提到) 还加载了两个重要组件 Illuminate\Database\Query\Grammars...\Grammar: SQL语法编译器 和 Illuminate\Database\Query\Processors\Processor: SQL结果处理器。...接下我们到QueryBuilder类文件 \Illuminate\Database\Query\Builder.php里看看它里面的源码 namespace Illuminate\Database\Query...key大家应该都能猜到如果执行select、orderBy等方法,那么这些方法就会把要绑定值分别append到select和order这些数组里了,这些代码就不贴在这里了,大家看源码时候可以自己去看一下...、 wheres属性,那么我们见先来看看这三个属性编译器: /** * 编译Select * 部分SQL * @param \Illuminate\Database\Query\Builder

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

【Laravel系列4.2】查询构造器

大家可以看到,在代码中还使用了一个 toArray() 结尾,这样返回就是一个数组。如果在没有做其它设置情况下,这个数组每一项会是一个 stdClass 对象。...、数组或者一个 stdClass 了,已经不是可以持续构造 Builder 对象了。...赶紧去 【PHP设计模式之建造者模式】https://mp.weixin.qq.com/s/AhCLhH3rQAOULdZ2NtSGDw 中复习一下吧,构造器 建造者 这两个名词可以互换哦,这下明白为什么今天我们这篇文章和这些功能为什么叫做...注意看我注释掉第二种多条件写法,在这里面使用了 orOn() 和 where() ,大家可以打开测试一下,结果如下 SQL 语句。...不过需要注意,insert() 返回布尔值,表示成功失败,所以在批量插入时候想要得到所有的插入 ID 就需要用别的方法了。

16.8K10

orm 系列 之 Eloquent演化历程2

,所以讲错误地方,恳请大牛们能不吝赐教;或者如果有什么地方没看懂,也请提出来,因为可能那地方就是自己没看懂,所以没讲明白,你提出后我们就可以一起讨论,让我们能共同进步。...: 接着,我们看看是怎么使用Blueprint,下看创建table $grammar = new Illuminate\Database\Schema\Grammars\MySqlGrammar; $...); 此时返回$statements一个array,有count($statements)==1,并且$statements[0]为: create table `users` (`id` int...:前一篇讲对于Active Record模式中Model功能,包括了Model、Builder和Relation功能,忘记可以去看前一篇orm 系列 之 Eloquent演化历程1内容 Query...*版本时候,laravel/framework还采用psr-0规范,所有其目录层级还是src/Illuminate/Database,在这个版本中有个新目录Capsule,其下面一个Manager

2.4K30

Laravel Validation 表单验证(二、验证表单请求)

filled 验证字段在存在时不能为空。 gt:field 验证字段必须大于给定 field。两个字段必须相同类型字符串、数字、数组和文件都使用 size 进行相同评估。...gte:field 验证字段必须大于或等于给定_field_。两个字段必须相同类型字符串、数字、数组和文件都使用 size 进行相同评估。...integer 验证字段必须整数。 {注} 此种验证规则不是验证数据 “integer” 类型,仅验证字符串或数值包含一个 integer. ip 验证字段必须 IP 地址。...lt:field 验证字段必须小于给定 field.。这两个字段必须相同类型字符串、数值、数组和文件大小计算方式与 size 方法进行评估。...lte:field 验证中字段必须小于或等于给定 _字段 _。这两个字段必须相同类型字符串、数值、数组和文件大小计算方式与 size 方法进行评估。

29.1K10

【译】深入研究 Laravel 依赖注入容器

不幸官方文档并没有涵盖所有可用功能,因此,决定尝试写文档为自己记录一下。以下基于Laravel 5.4.26,其他版本可能有所不同。...Container实例方法,但最简单方法调用 app()helper方法: $container = app(); 今天不会描述其他方式,而是想专注于Container类本身。...类/接口名称,尽管你不能使用类型提示检索它,但必须使用 make()代替: $container->bind('database', MySQLDatabase::class); $db = $container...为什么忽略参数,请参阅PR 上下文绑定 有时候你想在不同地方使用不同接口实现,下面Laravel 文档中一个例子: $container ->when(PhotoController::...最后 isShared() - 确定给定类型是否共享单例/实例 isAlias() - 确定给定字符串是否已注册别名 hasMethodBinding() - 确定容器是否具有给定方法绑定 getBindings

4.6K70

从0开始做一个审批模块

所以这个需求方,可以定义为多态,说通俗一点就是通过类型和 ID 来决定对象。不过这里并没有定义为多态,因为应用里面不会出现需求方不确定类型场景,还是继续沿用 creator_id。...从上面的需求场景中我们可以看出,被申请对象可能团队也可能项目,也就是被申请对象不确定,和上面的不确定需求方等同;且一个被申请对象可以被不同需求方申请多次,也就是典型 一对多多态关联[1]...•申请加入:action = join•申请报销:action = reimburse 管理员审批 同样,我们也会出现几个疑问: 1.谁审批?...换做以前,或者现在大部分人可能会这么来干: ... public function passed(Request $request) { ......上面的内容其实跟 申请事务处理 设计一样样,至于为什么把 通知 单独出来讲主要是为了以下程序设计。 审批通知列表 在需求方发送申请之后,其对应管理员审批列表该如何呈现呢?

1.6K10

Laravel5.7 Eloquent ORM快速入门详解

此外,Eloquent 默认主键字段自增整型数据,这意味着主键将会被自动转化为 int 类型,如果你想要使用非自增或非数字类型主键,必须在对应模型中设置 incrementing 属性为 false...集合 对 Eloquent 中获取多个结果方法(比如 all 和 get)而言,其返回值 Illuminate\Database\Eloquent\Collection 一个实例,Collection...::where('active', 1) - where('destination', 'San Diego') - update(['delayed' = 1]); update 方法要求以数组形式传递键值对参数...Model; use Illuminate\Database\Eloquent\Builder; class AgeScope implements Scope { /** * 应用作用域到给定...php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * 让查询只包含给定类型用户

15K41

php+laravel依赖注入知识点总结

但这跟依赖注入有什么关系,真正依赖注入不需给方法传递任何参数值,只需要指明方法参数类型,代码自动查找关系依赖自动注入。...instance)) { $this- spliceIntoParameters($parameters, $key, $instance); } } return $parameters; } 通过反射类方法得到类参数数组...至此参数就构造好了,然后最终会被 runController 方法 call_user_func_array 回调。 总结: 1....依赖注入原理其实就是利用类方法反射,取得参数类型,然后利用容器构造好实例。然后再使用回调函数调起。 2. 注入对象构造函数不能有参数。否则会报错。Missing argument 1 3....依赖注入故然好,但它必须要由 Router 类调起,否则直接用 new方式无法实现注入。所以这就为什么只有 Controller 、Job 类才能用这个特性了。

2.5K41

最为常用Laravel操作(1)-Eloquent模型

, 这意味着主键将会被自动转化为 int 类型, 如果你想要使用非自增或非数字类型主键, 必须在对应模型中设置 $incrementing 属性为 false , 如果主键不是整型, 还要设置 $keyType...->restore(); $flight->history()->restore(); 本地作用域 /** * 只包含活跃用户查询作用域 * * @return \Illuminate\Database...')->get(); 动态作用域 /** * 让查询只包含给定类型用户 * * @param \Illuminate\Database\Eloquent\Builder $query * @param...$books = App\Book::with('author.contacts')->get(); // 渴求式加载指定字段 // 注: 使用这个特性时, id 字段必须列出 $users =...反序列化为 PHP 数组 // 设置 options 属性值时, 给定数组将会自动转化为 JSON 以供存储 'options' => 'array', ];

24800

【Laravel系列4.6】

主要也是因为这两个小功能应用会比较广泛,并且源码实现也非常简单易懂,就简单说一下源码大概位置,大家直接自己看一下就好了。因此,这篇文章也可以看成本系列教程学习一个中场休息。...事务 对于数据库来说,事务操作是非常经典而且也很实用一个技术。具体事务干什么我们就不多说了,毕竟这也不是数据库知识普及文章。在电商、金融类应用中,事务是非常重要功能,也是必须能力。...现在,你再回到路由中去测试我们查询结果,就会发现输出内容符合我们预期数组格式了。...在 Connection 对象 config 属性中,清晰地记录着我们 config/database.php 中配置信息。然后,根据配置名称进行判断就好啦。相信剩下事情就不用多说了。...另外还需要注意一点,Model 查询结果如果使用了 toArray() 的话,返回数据直接就是数组格式为什么呢?

1.3K30

浅析 Laravel 底层原理:契约(Contracts)「建议收藏」

大家好,又见面了,全栈君。 简介 Laravel 中契约是指框架提供一系列定义核心服务接口(interface)。...例如,Illuminate\Contracts\Queue\Queue 契约定义了队列任务所需方法,而 Illuminate\Contracts\Mail\Mailer 契约定义了发送电子邮件所需方法...如果你长期关注类单一职责,你会注意到使用契约还是 Facades 其实没多少实际意义上区别。 然而,你可能还是会有几个关于契约问题。例如,为什么要使用接口?不使用接口会比较复杂吗?...因为我们依赖于一个扩展包特定缓存类。一旦这个扩展包 API 被更改了,我们代码就必须跟着改变。...而契约扩展包不包含任何实现和依赖项,你可以轻松地编写任何给定契约替代实现,来实现不修改任何关于缓存消费代码就可以替换缓存实现。

95610
领券