我现在才了解到laravel是一个真真正正的重型框架。。。一般我学习框架的时候会首先去瞄一眼源代码,或者至少看一看接口(或虚基类)里面怎么定义参数表的。结果我连源代码的位置都找了半天。数据库方面,最基础的操作的位置居然在composer加载的依赖vendor
文件夹内部!我服。
它基本是采用DB门面(这个是什么?喵喵喵)进行数据库操作的。使用的迷之静态方法常常由某__callStatic()“膜”术方法加载而来。
vendor/laravel/framework/src/Illuminate/Database/Connection.php
vendor/laravel/framework/src/Illuminate/Database/ConnectionInterface.php
这两个文件里面包含了很多最基础的数据库操作
支持
目前laravel支持四种数据库系统。我看到的源代码中是通过使用一个迷之工厂模式设计出的。
- MySQL
- Postgres
- SQLite
- SQL Server
原生sql操作
这个不建议使用,如果有用到的话可以看一眼。(讨厌sql满天飞,很丑,并且担心注入问题)
DB::select($sql);
这个是select语句的原生sql查询写法,insert、delete、update语句同理,非常简单粗暴。
教学手册
如果一定要使用原生语句,还是很建议使用参数绑定,至少安全一点。
使用查询构造器进行增删改查
使用DB门面的table方法,就能返回一个查询构造器了。
DB::table('tablename')->balabalabala....
目前我对它的原理不是很清楚,不过知道的唯一一点就是,查询构造器某种意义上是对PDO的封装,所以暂时不需要考虑特殊字符转义问题,这个已经替我们做好了。
查询构造器的使用方法比较繁杂,老实说我踩了一堆坑,这里留给大家一点东西,供大家一边学一遍查(都是在线的sad)
教学手册
API官方文档(这个真是找的我内牛满面)
使用的例子
(以下从教程手册里提炼
SELECT
- 获取全部:get()
- 获取一行:first()
- 获取一行中某列的值:value('COLUME_NAME')
- 获取一部分数据:chunk()
- 获取一列的值列表:lists('COLUME_NAME')
这里贴一下chunk()函数的示例用法
DB::table('users')->chunk(100, function($users) { });
chunk函数用在结果集量很大的时候。第一个参数位每次抓取数据的条数,第二个回调函数里的参数是每次传回的部分结果集。回调函数里可以进行你所想要的操作,当然也可以在你想要停止查找结果集的时候return false来终止这个循环。