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();