thinkphp数据库与模型操作指南与最佳实践

所属分类:Database | 发布于 2022-10-17 18:09:24

thinkphp操作数据库主要有两种方式,一种是使用数据库也就是Db操作,这种方式不用建立数据表对应的模型;另外一种方式是使用模型也就是Model操作,这种方式一般一张表都会对应一个实体类。

从5.0开始,thinkphp的数据库和模型已经独立为ThinkORM库,默认安装应用的时候会自动安装。可以单独卸载topthink/think-orm后安装其它的ORM库,这篇文章参考的thinkphp版本是6.0.12。

 

数据库操作和模型操作的区别

1. 模型除了可以调用数据库的方法之外(数据库Db的所有查询构造器中的方法都支持),还可以定义自己的方法。换句话说,可以把模型看成是数据库的增强版。

2. 模型操作和数据库操作另外一个显著区别是模型支持包括获取器、修改器、自动时间写入在内的一系列自动化操作和事件,简化了数据的存取操作。

 

下面,我们从调用方式、新增、修改、删除、查询五个方面来对比这两种方式的区别,以及在合适的时候给出最佳实践。

一、调用方式

数据库Db调用方式

数据库Db调用方式主要有两种

调用方式1,使用facade/Db类:
Db::table('think_user')->where('id',1)->find();
调用方式2,使用容器调用:
app('db')->table('think_user')->where('id',1)->find();

模型调用

模型的操作方法无需和数据库操作一样必须先调用table或者name方法,因为模型会按照规则自动匹配对应的数据表。如

//数据库Db操作
Db::name('user')->where('id', '>', 10)->select(); //返回数据集对象,可使用toArray方法转换成数组
//改成模型操作的话就变成
User::where('id', '>', 10)->select(); //包含了模型的数据集对象

 

二、新增操作

数据库新增主要方法

1. save()

2. insert()

3. insertGetId()

4. insertAll()

模型新增主要方法

1. save()

2. 静态方法create();

 

三、更新操作

数据库更新操作

方式一:使用save方法更新数据

方式二:使用update方法

模型更新操作

方式一:先查找再更新,取出数据,更改字段内容后使用save方法更新数据,这种方式是最佳的更新方式。

方式二:使用静态方法update直接更新

 

四、删除操作

数据库删除操作

// 根据主键删除
Db::table('think_user')->delete(1);
Db::table('think_user')->delete([1, 2, 3]);

// 条件删除    
Db::table('think_user')->where('id', 1)->delete();
Db::table('think_user')->where('id', '<', 10)->delete();

// 无条件删除所有数据,出于安全考虑,如果不带任何条件调用delete方法会提示错误,如果你确实需要删除所有数据,可以使用
Db::name('user')->delete(true);

模型删除操作

//方式一:查询后调用delete方法
$user = User::find(1);
$user->delete();

//方式二:根据主键删除
User::destroy(1);
//支持批量删除多个数据
User::destory([1,2,3]);

//方式三:条件删除
User::where('id','>',10)->delete();

//方式四:闭包删除
User::destroy(function($query){
    $query->where('id','>',10);
});

 

五、查询操作

数据库和模型关于查询的方法比例类似,主要有以下方法,主要区别是当行查找还是多行查找。

单行查找

find();
findOrEmmpty(); //不存在数据时返回空数组
findOrFail(); //没有找到数据时抛出异常

多行查找

select();

文哥博客(https://wenge365.com)属于文野个人博客,欢迎浏览使用

联系方式:qq:52292959 邮箱:52292959@qq.com

备案号:粤ICP备18108585号 友情链接