thinkphp6数据库操作

数据库

链接

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

  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
那么就到此为止吧,再写就不礼貌了!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ThinkPHP 6 中默认使用的是小写字母的表名。如果你想要将表名转换为大写字母,可以在配置文件 config/database.php 中的 'identifier_quote_character' 配置项中设置为 `"`,这样所有表名都将被转换为大写字母。 例如: ``` 'identifier_quote_character' => '"', ``` 但是强烈不建议使用大写字母命名表名,因为大多数数据库系统都是区分大小写的,容易造成命名空间的混淆,导致程序运行错误。 ### 回答2: 在ThinkPHP6中,数据库表名的转换可以通过配置文件进行设置,具体的配置项是`'db_table_name_convert'`。 首先,在`config/database.php`文件中,我们需要找到`'connections'`数组下的相应数据库连接配置项,例如`'mysql'`,然后在该配置项中加入`'db_table_name_convert'`这个配置项,如下所示: ```php 'mysql' => [ // ... 'db_table_name_convert' => true, // ... ], ``` 将`'db_table_name_convert'`设置为`true`,表示开启数据库表名转换功能。 默认情况下,ThinkPHP6会将数据库表名转换为小写字母,加上数据表前缀,并用下划线连接单词。但如果我们将`'db_table_name_convert'`设置为`true`,则可以将数据库表名转换为大写字母。 例如,有一个名为`user_info`的表,如果开启数据库表名转换功能后,它会被转换为`USER_INFO`。 总之,要将数据库表名转换为大写字母,只需要将ThinkPHP6中相应的数据库连接配置项中的`'db_table_name_convert'`设置为`true`即可。使用这种方式可以灵活控制数据库表名的大小写格式。 ### 回答3: 在ThinkPHP6中,数据库表名的转换为大写字母可以通过配置文件进行设置。具体步骤如下: 1. 打开项目目录下的`config`文件夹,找到`database.php`文件。 2. 打开`database.php`文件后,找到`'params'`数组中的`'table_name'`键,该键用于设置数据库表名的转换规则。 3. 默认情况下,`'table_name'`的值为空数组`[]`,表示不对数据库表名进行任何转换操作。可以在该数组中设置转换规则。 4. 要将数据库表名转换为大写字母,可以设置`'table_name'`的值为`['strtolower' => 'strtoupper']`。这里的`'strtolower'`和`'strtoupper'`是PHP内置的函数,分别用于将字符串转换为小写和大写。 5. 设置完成后,将`'database.php'`文件保存并关闭。 完成以上步骤后,在ThinkPHP6中使用数据库时,所有数据库表名都会被自动转换为大写字母。例如,数据库中的`user`表会被转换为`USER`。 需要注意的是,修改`database.php`配置文件后,需要重启项目才能生效。 以上就是将ThinkPHP6数据库表名转换为大写字母的方法,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦简_yz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值