Thinkphp6(操作SQL数据库)

Env::get('database.hostname')    // 获取env文件内容
Env::has('database.hostname')    // 判断database.hostn ame 是否存在
Config::get('database.connections.mysql.hostname')    // 获取config文件里的database > conn......

* User是已继承数据库的类

// 数据库 -> 连接
    // 继承Model连接的数据库 并命名为User
    class User extends Model
    // 选择已连接数据库  不选默认第一个已连接数据库
    protected $connection = '已连接的数据库名称'

// 数据库 -> 操作
    // 预览SQL语句
        User::getLastSql();
    // 选择数据库    connect
        Db::connect('enen')->table('user')->select();


// 原生SQL
    // 查 
        User::query('SELECT * FROM user');
    // 增 删 改
        User::execute('UPDATE user SET name = '??' WHERE id = 1');


// 增 删 改 查
    // 构造器
        table();     // 设置数据表
        field();    // 设置查询字段
        find();    // 返回单挑记录

    // 增改通用
        // save($data);    // 存在主键就是修改    不存在就是新增

    // 增
        $data = ['name' => '张三','pass' => '123456']    ;    // 添加的数据
        // 添加单行数据
        // 推荐使用第一种方法 ,没实例化都能使用让插入
        $user2 = UserModel::create(['name' => '新增名','pass' => '新增密码'],['只能写入指定的字段 和最下面那个allowField一样(可选)'],'是否用replace新增 true是 false否')
        User::name('user')->insert($data);        // 添加完后返回新增几条数据
        User::name('user')->insertGetId($data);    // 添加完后返回添加的字段id


        // 抛弃不存在的字段 并添加数据
        User::name('user')->strict(false)->insert($data);

        $datas = [['name' => '张三','pass' => '123456'],['name' => '李四','pass' => '123456']];
        // 多行添加
        User::name('user')->strict(false)->insertAll($datas);
        

    // 删
        // 根据主键直接删除
            User::name('user')->delete(2);
        // 根据主键直接删除二
             User::name('user')->destroy(['id'=>2]);    // destroy 运行过程:先查询出来后删除,可以闭包
        // 根据主键删除多条
            User::name('user')->delete([2,4,6]);
        // 通过where()
            User::name('user')->where('id',2)->delete();


    // 改
        $data = ['name' => '嗯嗯'];
        // 修改单行
            User::name('user')->where('id','5')->update($data,['id'=>5]);    // 写了最后的id=5就不需要where,id=5的那位置只可以写主键


    // 查
        // 单条数据 查询
            // 单条数据查询 id为2    没有查询到就返回null
            User::table('user')->where('id','2')->find();
            // 单条数据查询 id为2    没有查询到就返回空
            User::table('user')->where('id','2')->findOrEmpty();
            // 单条数据查询 id为2    没有查询到就抛出异常
            User::table('user')->where('id','2')->findOrFail();

        // 数据集 查询
            // 查询user表所有内容
            User::table('user')->select();    
            // 查询所有age = 18    没有查询到就返回空
            User::table('user')->where('age','18')->select();    
            // 查询所有age = 18    没有查询到就抛出异常
            User::table('user')->where('age','18')->selectOrFail();    
            // 查询出来的数据转为数组
            User::table('user')->select()->toArray();    

        // 返回id = 2的name字段的值
        User::table('user')->where('id','2')->value('name');    

        // 查询指定列的所有值    查询一列值
        User::table('user')->column('name');
        // 在使用id为键 ( 索引号 )
        User::table('user')->column('name','id');

        // 高级用法 分批查询 减少内存消耗
            User::name('user')->chunk(3,function($users){    // 每次查询三条 然后遍历 输出
                foreach ($users as $user){
                    dump($user)
                }
            })

        // 高级用法二 :游标查询功能 (一条一条显示出来 减少内存消耗)
            $cursor = User::name('user')->where('id','2')->cursor();    // 不带where就是查询所有
            foreach($cursor as $user){
                dump($user);
            };


// 模糊查询
    User::table('user')->where('name','like',['小%','嗯%'],'or')->select();    // 查找name中小和嗯开头的
    User::table('user')->whereLike('name',['小%','嗯%'],'or')->select();    // 和上面一句等价
    User::table('user')->whereNotLike('name',['小%','嗯%'],'or')->select();    // 上一句的反向
    
    // 查询id为多少到多少之间
        User::table('user')->whereBetween('id','3,6')->select();    // 查询id 3到6    包括6
        User::table('user')->whereNotBetween('id','3,6')->select();    // 上一句的反向

    // 查询id为3,6,8
        User::name('user')->whereIn('id','3,7,8')->select();
        User::name('user')->whereNotIn('id','3,7,8')->select();    // 上一句反向

// exp 自定义拼接SQL语句
    User::name('user')->where('id','exp','这里是要拼接的SQL语句')->select();

    例:查询id为3,6,8
        User::name('user')->where('id','exp','IN (3,6,8)')->select();

// 聚合函数 (聚合查询)
    User::name('user')->count();    // 数据总数
    User::name('user')->count('age');    // age 字段总数 NULL不算

// 子查询
    // 先求出user表内所有gender = 男的id,然后在userTwo求出对应表一求出id的数据
        $name1 = User::name('user')->field('id')->where('gender','男')->buildSql(true);    // buildSql 把这句话转为SQL语句,不执行.
        $name2 = User::name('userTwo')->where('id','exp','IN '.$name1)->select();

        // 方法二
            User::name('userTwo')->where('id','exp','IN '.User::name('user')->field('id')->where('gender','男')->buildSql(true)>select();

        // 方法三
            User::name('userTwo')->where('id','IN' , function($query){
                $query->name('user')->field('id')->where('gender','男');    // $query 是最前面那个数据库对象
            })->select();


// 事务处理    数据库引擎需是innoDB
    // 比如转账一个减少一个加 如果减了,加的SQL出错就会自动把减少的加回去
    // 自动模式
        User::Transaction(){    
            User::name('user')->where('id','2')->save(['age'] => User::raw('age' - 3)]);        // id为2的age减3
            User::name('user')->where('id','3')->save(['age'] => User::raw('age' + 3)]);    // id为3的age加3
        };    // 如果只减少了没有加 就会把减的返反回去

    // 手动模式
        User::starTrans();    // 开启事务
        try {
            User::name('user')->where('id','2')->save(['age'] => User::raw('age' - 3)]);        // id为2的age减3
            User::name('user')->where('id','3')->save(['age'] => User::raw('age' + 3)]);    // id为3的age加3
            
            User::commit();    // 提交事务
        } catch (\Exception $e){
            echo '执行SQL失败,开始回滚数据';
            User::rollback();
        }

    
// 选择器
    ->withAttr('name',function($value,$data){    // $value = 字段内的值    $data = 所有数据
        return strtoupper($value);    // 把name字段 转为大写
    })

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值