本章简单介绍一下,模型和数据库的使用。我们可以单独使用数据库Db类来获取数据。也可以使用框架提供的模型来获取数据库数据。
在ThinkPHP中,使用Db类,可以使用下面的方式:
1、Db::table(‘think_user’),通过use think\facade\Db来导入门面类。
2、app(‘db’)->table(),通过app()来获取容器,app()是一个助手函数。
以查询单个数据为例,查询单个数据使用find方法:
// table方法必须指定完整的数据表名
Db::table('think_user')->where('id', 1)->find(); //查询的结果如果为空返回NUll,否则返回数组
//还可以使用容器的方式,访问Db数据库连接对象的实例
app('db')->table('think_user')->where('id', 1)->find();
其它的使用数据库方法使用类似,具体可以参考官方文档。
说明:
使用Db类操作数据库或者使用模型操作数据库,都是需要先配置数据库信息,在config目录下面的database.php文件里面可以查看具体配置。这个文件里面的配置,读取的是.env文件内的配置。
分页查询
1、使用limit()进行分页查询。
//例如,查询第10行记录后的25条
Db::table('article')->limit(10,25)->select();
2、使用page()进行分页查询。
//例如,查询第10行记录后的25条
Db::table('article')->limit(10,25)->select();
插入数据
使用insert()插入一条数据,如果表设置了主键,并且自动递增,这样就会在最后新增一条数据到表里。
//insert 方法添加数据成功返回添加成功的条数,返回 1。否则,抛出异常。
$data = ['name' => 'test', 'gender' => '0'];
Db::name('user')->insert($data);
删除数据
使用delete()删除一条或多条数据。
//delete方法返回影响数据的条数,没有删除返回 0
Db::table('think_user')->where('id',1)->delete();
//根据主键删除
Db::table('think_user')->delete(1);
Db::table('think_user')->delete([1,2,3]);
更新数据
使用update()修改数据
//update方法返回影响数据的条数,没修改任何数据返回 0
Db::name('user')
->where('id', 1)
->update(['name' => 'thinkphp']);
使用模型来操作数据
实际开发中,使用模型来操作数据较多。模型较Db操作数据有着更为方便的操作。
模型使用
1、首先定义模型类Test,继承think\Model。
2、使用模型提供的方法来进行增删改查。
以查询为例,在要查询的控制器内使用:
Test::find(1); //1为主键值
模型使用find方法查询,如果数据不存在返回Null,否则返回当前模型的对象实例。如果需要返回数据,而不是对象实例,使用toArray()转换返回数组。
在使用模型时,最好在控制器中只调用模型,具体的操作都放在模型的自定义方法中,这样简洁,利于重复使用。
//以上面Test模型为例,直接在控制器中查询数据
$model = new Test();
$result = $model->where("id", "22")->order("id", "desc")->select();
if(empty($result)) {
return [];
}else {
return $result->toArray();
}
//上面操作数据逻辑,是查询数据并判断输出。应该放到模型中,这样可以简洁代码,并且可以重复使用代码。
查询数据时调试方法
- 打开调试模式,页面中查看SQL执行。如图:
- 使用链式操作的fetchSql,可以返回SQL执行。
- 使用getLastsql方法来输出上次执行的sql语句,这样也可以调试。