勾股OA在线文档

查询数据

数据查询使用与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();