thinkphp6数据库操作

文章目录

    • 数据库
        • 链接
    • 查询构造器
        • 查询
    • 添加
    • 修改
    • 删除
    • 链式操作
    • 链式操作
      • 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();

这是建表的语句,以及操作的数据表
thinkphp6数据库操作_第1张图片

这是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方法的情况通常是为了:

  1. 切换操作的数据表;
  2. 对多表进行操作

对多表进行操作,用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
那么就到此为止吧,再写就不礼貌了!

你可能感兴趣的:(PHP,数据库,php,mysql)