首页 > 编程 > PHP > 正文

关于ThinkPHP5的数据库和模型用法

2020-03-22 20:22:24
字体:
来源:转载
供稿:网友
1,TP5的数据库架构

这里写图片描述

Db: 是TP5操作数据库的入口类。它的作用是为连接数据库做准备,我们只需要在database.php里填写相应的配置即可。
Connection: 是TP5的连接器类,因为TP5支持四种数据库(Mysql,Pgsql,Sqlite,Sqlsrv),所以TP5封装了一个类来提供统一的调用接口来支持我们连接数据库(这里的连接是惰性连接,只有在执行SQL的时候才会真正连接)。
Query: 查询器,因为不同数据库的SQL语句不同,所以封装了一个Query类来提供统一的接口,以实现不同数据库的CURD操作。查询器是TP5数据访问层的核心,它连接了Connection和Builder。
Builder: 生成器。这个类主要是把Query的查询参数生成相应的sql语句,然后把其返回给Connection供其使用。
2, 数据库的访问

在TP5中,对于数据库的访问有三种方法:

原生sql语句。

Db::query( select * from think_user where id=? ,[8]);Db::execute( insert into think_user (id, name) html' target='_blank'>values (?, ?) ,[8, thinkphp 

查询构造器

这里写图片描述

需要注意的是,上述的查询方法中find,select,insert,update,delete都是查询操作,其他的都是辅助操作,辅助操作返回的是个对象,支持链式调用。但一旦执行了查询操作,就不能继续调用了。

不同的辅助操作先后顺序没影响,但是相同的辅助操作先后顺序会有影响。

不同的辅助操作,先后顺序没影响。Db::table( banner )- where( id , , 2 )- order( update_time asc )- select();Db::table( banner )- order( update_time asc )- where( id , , 2 )- select();
相同的查询操作,先后顺序有影响。$list = Db::table( data ) - where( id , , 1) - where( name , like , %think% ) - order( id , desc ) - order( create_time , desc ) - limit(8) - select();$list = Db::table( data ) - where( name , like , %think% ) - where( id , , 1) - order( create_time , desc ) - order( id , desc ) - limit(8) - select();

模型

ORM Object Relation Mapping 对象关系映射

就是通过模型来映射到我们的数据库中的表,然后通过操作模型来操作数据库。

我们通过和查询构造器对比来看

// 查询操作$user = Db::table( user )- find(1);// 取值操作echo $user[ name echo $user[ email // 设置操作$user[ name ] = topthink $user[ email ] = thinkphp@qq.com // 更新操作Db::table( user )- update($user);

如果是模型操作的话,就可以对应下面的代码实现

// 查询操作$user = User::get(1);// 取值操作echo $user- name;echo $user- email;// 设置操作$user- name = topthink $user- email = thinkphp@qq.com // 更新操作$user- save();

这里是在模型的外部,也就是控制器里的取值和设置操作,但是在模型内部,是使用如下方式:

// 取值操作echo $user- getData( name echo $user- getData( email // 设置操作echo $user- data( name , SpawN echo $user- data( email , 123@qq.com 

模型的CURD操作

创建

Db 用法:

Db::table( user )- insert([ name = spawn , email = 123@qq.com ])

模型用法:

$user = new User;$user- save([ name = spawn , email = 123@qq.com ])$user = User::create([ name = sapwn , email = 123@qq.com ])

总结:

save(动态) 返回: 影响的记录数

create(静态) 返回:模型对象实例 (可以直接调用方法)

读取

Db :

$user = Db::table( user )- where( id , 1)- find();

模型:

$user = User::get(1);

需要注意的是,find和select是查询构造器的方法,get和all是模型的方法。但模型又是基于查询构造器的,所以模型可以调用find和select方法,但是查询构造器不能调用get和all方法

总结:

方法 作用 返回值
get 查询单个记录 模型对象实例
find 查询单个记录 模型对象实例
all 根据主键查询多个记录 包含模型对象实例的数组或者数据集
select 根据条件查询多个记录 包含模型对象实例的数组或者数据集

更新

Db :

Db::table( user )- where( id , 1)- update([ name = haha , email = heihei@qq.com ])

模型:

$user = User::get(1);$user- save([ name = haha , email = heihei@qq.com ])User::update([ name = topthink , email = topthink@qq.com ,], [ id = 1]);

总结:

方法 作用 返回值
save 更新数据 影响的记录数
update 更新数据(静态) 返回模型对象实例

需要注意的是,模型的更新操作是只更新有变化的数据。性能比较好。

删除

Db:

Db::table( user )- delete(1);

模型:

$user = User::get(1);$user- delete();User::destory(1);

总结:

方法 作用 返回值
delete 删除当前数据 影响的记录数
destroy 删除指定数据(静态) 影响的记录数

现在我们已经掌握了模型的基本CURD操作,我们来总结下方法区别:

用法 Db类 模型(动态) 模型(静态)
创建 insert save create
更新 update save update
读取单个 find find get
读取多个 select select all
删除 delete delete destroy

本文讲解了关于ThinkPHP5的数据库和模型用法 ,更多相关内容请关注php 。

相关推荐:

关于thinkphp5.0数据库操作的案例

列举ThinkPHP5与ThinkPHP3的一些异同点

创建一个最简单的ThinkPhp项目工程

以上就是关于ThinkPHP5的数据库和模型用法的详细内容,PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表