首页
学习
活动
专区
圈层
工具
发布

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

但是你要知道的是,Laravel 以及现代化的所有框架都是可以方便地配置主从分离的。另外,我们还要再回去 查询构造器 中,看一下我们的原生 SQL 语句的拼装语法到底是如何生成的。...其实我们在 查询构造器 那篇文章中就已经看到过 Laravel 是如何生成 SQL 语句了,还记得我们分析的那个 update() 方法吗?...在 Builder 中,get() 方法会调用一个 runSelect() 方法,这个方法里面会再调用一个 toSql() 方法,就是获得原始查询语句的方法。...protected function compileComponents(Builder $query) { $sql = []; foreach ($this->selectComponents...当然,更复杂的东西其实还是在构造器中,毕竟在语法生成这里其实是已经到了最后的拼装阶段了。有兴趣的同学可以多深入研究一下 Builder 对象中关于上述功能的方法实现。

4.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Laravel系列4.2】查询构造器

    其实,查询构造器就相当于我们将原始 SQL 的操作进行了一次封装而已。而且,在模型中,其实内部调用的也是这个 查询构造器 。也就是说,查询构造器是介于 模型 和 原始语句 操作中间的一层。...我们又发现了一个设计模式在 Laravel 框架中的应用,意外不意外,惊喜不惊喜! 连表查询 普通的连表查询的使用还是非常简单的,我也就不多说了,下面的代码中也有演示。...直接通过编辑器的跳转功能点击 update() 方法就会跳转到 laravel/framework/src/Illuminate/Database/Query/Builder.php 的 update(...这个就要一步一步来看了,前面其实我们已经看到了 laravel/framework/src/Illuminate/Database/Query/Builder.php 这个对象的类文件,那么我们是怎么通过...use Illuminate\Database\Query\Builder as QueryBuilder; // laravel/framework/src/Illuminate/Database/

    17.6K10

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

    laravel模型为我们提供了一层数据库操作层,将数据交互独立出来。 但是久而久之,随着项目的需求不断扩大,最常用的查询操作,同样会有大量的冗余代码。...比如有一个查询条件: $publishedEvents = Event::where('published', '=', 1)->get(); 上述代码最后生成的SQL语句如下: SELECT * FROM...events WHERE `published` = 1; 如果条件 published = 1 在默认的情况下需要开启,我们可以使用laravel模型的 全局作用域 方式为所有查询追加上这个条件。...$builder) { $builder->where('published', '=', 1); }); } 这样SQL语句 where published = 1 就会追加到所有的模型查询方法内...而声明一个本地作用域,只要遵循laravel的语法规定即可,如下示例: public function scopePublished($query) { return $query->where('published

    1.6K22

    Laravel源码分析之模型关联

    模型关联在底层帮我们解决好了数据关联和匹配,应用程序中不需要再去写join语句和子查询,应用代码的可读性和易维护性更高。...使用模型关联预加载后,在效率上高于开发者自己写join和子查询,模型关联底层是通过分别查询主体和关联数据再将它们关联匹配到一起。...在开发中我们经常遇到的关联大致有三种:一对一,一对多和多对多,其中一对一是一种特殊的一对多关联。我们通过官方文档里的例子来看一下Laravel是怎么定义这两种关联的。...$this->query->where('users.country_id', '=', 1) 假设country_id是1 对应的SQL查询是: SELECT * FROM posts INNER JOIN...模型关联常用的一些功能的底层实现到这里梳理完了,Laravel把我们平常用的join, where in 和子查询都隐藏在了底层实现中并且帮我们把相互关联的数据做好了匹配。

    10.5K10

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

    builder) { $builder->where('age', '>', 200); }); 查询中要移除全局约束的限制,使用withoutGlobalScope方法 // 只移除age约束 User...$query) { return $query->where('active', 1); } } 使用上述添加的本地约束查询,只需要在查询中使用scope前缀的方法,去掉...Mutators 在Eloquent模型中,Accessor和Mutator可以用来对模型的属性进行处理,比如我们希望存储到表中的密码字段要经过加密才行,我们可以使用Laravel的加密工具自动的对它进行加密...模型的$casts属性提供了一种非常简便的方式转换属性为常见的数据类型,在模型中,使用$casts属性定义一个数组,该数组的key为要转换的属性名称,value为转换的数据类型,当前支持integer...,我们在数据库中存储json数据的时候,可以将其转换为数组形式。

    1.5K40

    Raw SQL,Query Builder与ORM

    Builder 确有其优点: 跨数据库:这层抽象能够抹平数据库特定的 SQL 语法差异,例如 MSSQL 不支持limit子句 松耦合:解除 Query 创建与序列化的紧耦合,尤其在动态创建查询的场景...例如在嵌套子查询之类的组合场景下,需要按顺序拼接字符串,我们在考虑创建查询的同时,还要关注其序列化细节,确保关联查询在结果 SQL 中的顺序正确: select * from `accounts...简言之,ORM 是一种数据转换机制,用来解决 OOP 中不同类型系统间的数据转换问题。...存的时候把对象值转换为数据库中存储的简单值组,取的时候再转换回来 或者只在程序中使用简单的标量值 ORM 采用的是第一种方式,提供双向转换能力,进而将编程语言中方便操作的数据模型与数据库中方便存储的数据模型关联起来...限制:一些操作无法通过 ORM 完成,比如子查询 性能:ORM 更“重”一些,性能代价也更大,复杂场景下尤为明显 比起 Query Builder,通用性问题在 ORM 中更突出一些,因为 ORM 更复杂

    1.8K20

    Laravel框架关键技术解析

    ,如query()方法中(new static)->newQuery(); F.Laravel中使用的其他新特性 1.trait 优先级:当前类的方法会覆盖trait中的方法,trait中的方法会覆盖基类的方法...,默认内容不是必须的 @include(‘子视图名称’):用于在视图文件中加载子视图文件,使得视图文件结构清晰 六、Laravel框架中的设计模式 A.服务容器 1.将服务理解为系统运行中需要的东西,如对象...//创建,第一次要composer down-autoload一下 php artisan db:seed [—class=类名] B.查询构造器 1.Laravel框架的查询构造器是在PDO扩展基础上设计的一个...(\Illuminate\Database\Query\Builder)实例封装了数据库连接实例、请求语法实例和结果处理实例,这里类的实例提供了统一的接口方法供查询构造器实例使用 5.查询构造器使用阶段...: SQL语句准备阶段,Illuminate\Database\Query\Grammars SQL语句执行阶段,Illuminate\Database\Connection C.Eloquent ORM

    14.3K20

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

    比如说我们可以使用类似于 array_map() 的函数把集合中的对象全部转换成数组,还可以用一个类似于 array_column() 的函数只获取数据中的两个字段组成键值对形式的数据。...而另外一个 map() 函数就不用多说了,之前我们说过,Laravel 的 PDO 在默认查询构造器的情况下,走的是 PDO::FETCH_OBJ ,获得的集合结果中的每个数据都是一个 stdClass...在所有模型都要继承的 laravel/framework/src/Illuminate/Database/Eloquent/Model.php 类中,我们很快就能发现一个 query() 静态方法。...而不是我们之前 查询构造器 中的 laravel/framework/src/Illuminate/Database/Query/Builder.php 对象。...但 Eloquent\Builder 的内部持有的一个query 属性依然是 Query\Builder 对象,也就是说在底层,它依然是调用的我们熟悉的那个 查询构造器 来进行工作的。

    3.7K20
    领券