文章目录
- 数据库
 - 链接
 
- 查询构造器
 - 查询
 
- 添加
 - 修改
 - 删除
 - 链式操作
 - 链式操作
 - where
 - table
 - field
 - page
 - odrder
 - join
 - cache
 
- 聚合查询
 - 分页查询
 
数据库
链接
在config下有个database.php文件,一般情况下我们配置这个文件即可
return [
    'default'    =>    'mysql',
    'connections'    =>    [
        'mysql'    =>    [
            // 数据库类型
            'type'        => 'mysql',
            // 服务器地址
            'hostname'    => '127.0.0.1',
            // 数据库名
            'database'    => 'xxx',
            // 数据库用户名
            'username'    => 'root',
            // 数据库密码
            'password'    => '123456',
            // 数据库连接端口
            'hostport'    => '',
            // 数据库连接参数
            'params'      => [],
            // 数据库编码默认采用utf8
            'charset'     => 'utf8',
            // 数据库表前缀
            'prefix'      => 'think_',
        ],
    ],
];
 
切换数据库一般用不到
 有需要可以参考官方文档
 地址: https://www.kancloud.cn/manual/thinkphp6_0/1037531
查询构造器
查询
查询单个数据
use think\facade\Db;
// table方法必须指定完整的数据表名
Db::table('think_user')->where('id', 1)->find();
 
find方法查询结果不存在,返回 null,否则返回结果数组
查询数据集
Db::table('think_user')->where('status', 1)->select();
 
select 方法查询结果是一个数据集对象,如果需要转换为数组在后面加上->toArray();
如果我们在配置文件中配置了表的前缀
 那么我们可以用如下的写法来查询数据
Db::name('user')->where('id', 1)->find();
Db::name('user')->where('status', 1)->select();
 
查询某个字段的值
Db::table('think_user')->where('id', 1)->value('username');
 
存在返回值,不存在返回null
查询某列字段
 返回数组
Db::table('think_user')->where('status',1)->column('name');
 
添加
添加一条数据
$data = ['username' => 'admin1', 'password' => md5('123456789')];
Db::name('user')->save($data);
$data = ['username' => 'admin1', 'password' => md5('123456789')];
Db::name('user')->insert($data);
 
insert 方法添加数据成功返回添加成功的条数,通常情况返回 1
添加多条数据
 insertAll,返回受影响的行数
$data = [
            ['username'=>'admin2','password'=>md5('123456')],
            ['username'=>'admin3','password'=>md5('1234567')],
            ['username'=>'admin4','password'=>md5('12345678')],
        ];
Db::name('user')->insertAll($data);
 
修改
用save方法更新
 返回受影响的行数
Db::name('user')
    ->save(['id' => 1, 'username' => 'admin1']);
 
用update更行
Db::name('user')
    ->where('id', 1)
    ->update(['username' => 'admin1']);
 
删除
根据主键删除数据
// 根据主键删除
Db::name('user')->delete(1);
Db::name('user')->delete([1,2,3]);
// 条件删除    
Db::name('user')->where('id',1)->delete();
Db::name('user')->where('id','<',10)->delete();
// 无条件删除所有数据
Db::name('user')->delete(true);
// 软删除数据 使用delete_time字段标记删除,推荐使用
Db::name('user')
	->where('id', 1)
	->useSoftDelete('delete_time',time())
    ->delete();
 
上面是基本的增删改查操作
 where语句可以像以下这样写
 等号还可以换成其他符号
Db::name('user')->where('id','=',1)->select();
Db::name('user')->where('id',1)->select();
 
链式操作
where一个查询语句中可以跟多个where
Db::table('think_user')
    ->where('id','>',1)
    ->where('username','admin4')
    ->select(); 
 
table
 下面的sql语句中,field用于查询指定字段
 查询user表中的name属性和role中的title属性
 table可以指定多张表和字段对应,limit限制查询的条数
Db::field('user.name,role.title')
->table('tb_user user,tb_role role')
->limit(10)->select();
//也可以写成数组的形式,为了避免和mysql的关键字冲突
Db::field('user.name,role.title')
->table([
    'tb_user'=>'user',
    'tb_role'=>'role'
])
->limit(10)->select();
 
这是建表的语句,以及操作的数据表
 
这是User模型的主要代码
 要使用这些代码还需引入对应的类
use think\facade\Db;
 
public function getAllUser(){
        return Db::name('user')->where('username','admin')->select();
    }
    
    public function getAllPassword(){
        return Db::name('user')->where('username','admin')->column('password');
    }
    public function insertUser(){
        $data = ['username' => 'admin1', 'password' => md5('123456789')];
        return Db::name('user')->save($data);
    }
    public function insertAll(){
        $data = [
            ['username'=>'admin2','password'=>md5('123456')],
            ['username'=>'admin3','password'=>md5('1234567')],
            ['username'=>'admin4','password'=>md5('12345678')],
        ];
        return Db::name('user')->insertAll($data);
    }
    public function updateUser(){
        return Db::name('user')->save(['id'=>1,'username'=>'admin1']);
    }
    public function deleteUser(){
        return Db::name('user')->delete(1);
    }
 
这是控制器的主要代码
 要使用User模型的方法还需要初始化User
	//先声明属性
	protected $User;
	//构造器实例化User类
    public function __construct(){
        $this->User = new User();
    }
 
    public function getAllUser(){
        // $User = new User();
        $res = $this->User->getAllUser();
        return json($res);
    }
    public function getAllPassword(){
        $res = $this->User->getAllPassword();
        return json($res);
    }
    public function insertUser(){
        $res = $this->User->insertUser();
        return json($res);
    }
    public function insertAll(){
        $res = $this->User->insertAll();
        return json($res);
    }
    public function updateUser(){
        $res = $this->User->updateUser();
        return json($res);
    }
    public function deleteUser(){
        $res = $this->User->deleteUser();
        return json($res);
    }
 
链式操作
where
一个sql语句中支持多个where条件
Db::table('think_user')
    ->where('id','>',1)
    ->where('username','admin')
    ->select(); 
 
table
一般模型能够自动识别当前对应的数据表,所以,使用table方法的情况通常是为了:
- 切换操作的数据表;
 - 对多表进行操作
 
对多表进行操作,用field指定查询字段
 table指定表,下面的列子中给tb_user设置了user别名
 给tb_role设置了别名role
 limit限制条数
 下面的例子中就是查询tb_user 表中的names
Db::field('user.name,role.title')
->table('tb_user user,tb_role role')
->limit(10)->select();
 
field
用于查询指定字段
Db::table('user')->field('id,username')->select();
 
page
page方法主要用于分页查询
 用limit实现分页查询
// 查询第一页数据
Db::table('article')->limit(0,10)->select(); 
// 查询第二页数据
Db::table('article')->limit(10,10)->select(); 
 
用page实现分页查询
// 查询第一页数据
Db::table('article')->page(1,10)->select(); 
// 查询第二页数据
Db::table('article')->page(2,10)->select(); 
 
odrder
order用于给查询结果进行排序,有desc和asc,默认asc
Db::table('user')
->where('status', 1)
->order('id', 'desc')
->limit(5)
->select();
 
join
JOIN方法用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
Db::table('tb_user')
->alias('a')			//为tb_user设置表的别名为a
->join('tb_role r','a.id = r.r_id')			//设置tb_role表的别名为r
->select();
 
cache
cache方法用于查询缓存操作
 第一次查询结果会被缓存,第二次查询相同的数据的时候就会直接返回缓存中的内容,而不需要再次进行数据库查询操作。
Db::table('tb_user')->where('id',5)->cache(true)->find();
 
指定缓存的时间为60s
Db::table('user')->cache(true,60)->find();
 
设置缓存标识
Db::table('user')->cache('key',60)->find();
 
在外部就可以通过\think\Cache类直接获取查询缓存的数据,利用缓存标识
$data = \think\facade\Cache::get('key');
 
聚合查询
获取表中数据总量
Db::table('tb_user')->count();
 
根据字段统计数据
Db::table('think_user')->count('id');
 
分页查询
ThinkPHP内置了分页实现,要给数据添加分页输出功能变得非常简单,可以直接在Db类查询的时候调用paginate方法
// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->paginate(10);
 
下面这个例子中,list_rows是每页数量,current_page是当前页
$list = Db::name('user')->where('status',1)->paginate([
    'list_rows'=> 20,
    'current_page' => 'page',
]);
 
官方文档: https://www.kancloud.cn/manual/thinkphp6_0/1037571
 那么就到此为止吧,再写就不礼貌了!



















