每一个web框架中,数据库的的操作都是重中之重的,今天俺将向大家阐述ThinkPHP中的数据库操作方法及分类。
之前的《ThinkPHP核心技术点简介》文章中,解释了ThinkPHP核心技术点,如果还未了解的,可以先去了解一下。
数据库分类
ThinkPHP支持四种数据库
- MySQL
- PgSQL
- SqLite
- SqServer
数据库操作方法
ThinkPHP支持三种数据库操作方法,其中ORM是需要重点学习的。
- 原生SQL
- 构造器来操作数据库
- 模型、关联模型来操作数据库 ORM
原生SQL
Db::query("select * from banner_item where banner_id=?",[$id]);
为什么不推荐使用原生SQL?
没有使用查询构造器来方便,最主要原因是解决了数据库开发中的差异性。
构造器
查询构造器简单使用案例
Db::table("banner_item")->where("banner_id","=",$id)->select()
查询构造器解析,Db隐藏数据库相应的具体操作的细节,Db之后的方法调用分为两大部分。
- table、where 链式方法,辅助方法,不会真正的执行sql语句
- select、find、update、delete、insert 查询方法,真正数据库执行方法
ORM与模型
ORM-> Object Relation Mapping 用中文来翻译简称就是对象关系映射 。
Db通常不能很好的处理我们的业务逻辑。
Model下还是Db类在驱动,只不过ThinkPHP将模型概念单独提出来了,并且帮我们封装好了。
Db属于数据库访问层,但是Model建立于访问层之上的处理业务逻辑的模型层。
- 模型还可以包含业务逻辑,包含业务的集合。
- 处理比较复杂的业务逻辑。
- ORM将表看做一个对象来看待,但是模型可以对应多个对象,多个表。
- 模型和表之间没有联系,因为划分不是用表来划分,模型是你自己的业务逻辑功能来划分的。
业务逻辑过于简单的时候,一个模型可能对应一个表,如果业务很复杂,那么模型和表可能就不是一一对应的了。
ThinkPHP可以将模型划分为三层 :
- model
- service
- logic
数据库中间层架构
TP5数据库里面连接是惰性的,节约服务器资源。
Query是对数据库常用的CURD的封装。
Query通过Builder生成原生SQL SQL=>Connection=>执行
封装性隐藏细节和差异,让客户端开发起来更加方便。
同一个标准Query查询器,用不同的Builder生成器来解析Query查询器,从而来适配不同的数据库。