查询数据
数据查询使用与ThinkPHP6
的一致,查询数据时需要使用ThinkPHP6的Db
类,因此需要在操作前use think\facade\Db
。
具体可参考ThinkPHP6的官方文档的TP6数据库操作
这里只列举一下一些常用的操作。
查询一条数据
1、name
方法,不需要写入表的全名,可去掉表前缀。
Db::name('Admin')->where('id', 1)->find();
2、table
方法,需要写入table表的全名,包括表前缀。
Db::table('oa_admin')->where('id',1)->find();
查询多条数据
1、name
方法,不需要写入表的全名,可去掉表前缀。
Db::name('Admin')->where('status', 1)->select();
2、table
方法,需要写入table表的全名,包括表前缀。
Db::table('oa_admin')->where('status', 1)->select();
以上方法查询结果是一个数据集对象,如果需要转为数组需要用到toArray()
方法,可这样写:
Db::name('Admin')->where('status', 1)->select()->toArray();
Db::table('oa_admin')->where('status', 1)->select()->toArray();
PS:在find()
和select()
方法之前可以使用所有TP6支持的链式操作,具体请参考TP6的官方开发手册。
值和列查询
查询某个字段的值可以用:
// 返回某个字段的值
Db::name('Admin')->where('id', 1)->value('name');
如果value()
方法查询结果不存在,则返回null
查询某一列的值可以用:
// 返回数组
Db::name('Admin')->where('status',1)->column('name');
// 指定id字段的值作为索引
Db::name('Admin')->where('status',1)->column('name', 'id');
如果要返回完整数据,并且添加一个索引值的话,可以使用:
// 指定id字段的值作为索引 返回所有数据
Db::name('Admin')->where('status',1)->column('*','id');
数据分批处理
如果需要处理成千上百条数据库记录,可以考虑使用chunk
方法,该方法一次获取结果集的一小块,然后填充每一小块数据到要处理的闭包,该方法在编写处理大量数据库记录的时候非常有用,比如数据导出excel表功能。
比如,我们要导出用户表的全部数据,导出过程需要进行分批处理,每次处理 100 个用户记录:
Db::name('Admin')->chunk(100, function($users) {
foreach ($users as $user) {
//
}
});
我们还可以通过从闭包函数中返回false
来中止对后续数据集的处理:
Db::name('Admin')->chunk(100, function($users) {
foreach ($users as $user) {
// 处理结果集...
if($user->status==0){
return false;
}
}
});
也支持在chunk
方法之前调用其它的查询方法,例如:
Db::name('Admin')->where('score','>',80)
->chunk(100, function($users) {
foreach ($users as $user) {
//
}
});
chunk
方法的处理默认是根据主键查询,支持指定字段,例如:
Db::name('Admin')->chunk(100, function($users) {
// 处理结果集...
return false;
},'create_time');
并且支持指定处理数据的顺序。
Db::name('Admin')->chunk(100, function($users) {
// 处理结果集...
return false;
},'create_time', 'desc');
查询最新一条记录的方法如下:
1、使用模型的order和find方法
// app/model/Article.php
namespace app\model;
use think\Model;
class Article extends Model
{
// ...
}
// 控制器或其它地方
use app\model\Article;
$article = Article::order('id', 'desc')->find();
这个用order把id排序为降序,然后find取第一条记录,即最后插入的一条。
2、使用模型的latest方法
$article = Article::latest()->find();
latest方法默认会按主键id降序排序取第一条记录。
3、使用查询构造器的order和find方法
use think\facade\Db;
$article = Db::name('Article')->order('id', 'desc')->find();