美文网首页
TP5数据库操作

TP5数据库操作

作者: yzw12138 | 来源:发表于2019-04-19 16:42 被阅读0次

    一、数据库

    • 1、原生查询
    // 插入记录
    $result = Db::execute('insert into think_data (id, name ,status) values (5, "thinkphp",1)');
    dump($result);
    // 更新记录
    $result = Db::execute('update think_data set name = "framework" where id = 5 ');
    dump($result);
    // 查询数据
    $result = Db::query('select * from think_data where id = 5');
    dump($result);
    // 删除数据
    $result = Db::execute('delete from think_data where id = 5 ');
    dump($result);
    // 显示数据库列表
    $result = Db::query('show tables from demo');
    dump($result);
    // 清空数据表
    $result = Db::execute('TRUNCATE table think_data');
    dump($result);
    
    • 2、切换数据库
      在配置文件中配置db1和db2两个数据库连接,通过connect方法进行切换。
    $result = Db::connect('db1')->query('select * from think_data where id = 1');
    $result = Db::connect('db2')->query('select * from think_data where id = 1');
    

    connect方法中的配置参数需要完整定义,并且仅仅对当此查询有效,下次调用Db类的时候还是使用默认的数据库连接。

    • 3、参数绑定
      在对数据库进行操作是时,需要接受外部传入的参数。
    Db::execute('insert into think_data (id, name ,status) values (?, ?, ?)', [8, 'thinkphp', 1]);
    $result = Db::query('select * from think_data where id = ?', [8]);
    dump($result);
    //支持命名占位符绑定
    Db::execute('insert into think_data (id, name , status) values (:id, :name, :status)', ['id' => 10, 'name' => 'thinkphp', 'status' => 1]);
    $result = Db::query('select * from think_data where id=:id', ['id' => 10]);
    dump($result);
    
    • 4、查询构造器
    // 插入记录
    Db::table('think_data')
        ->insert(['id' => 18, 'name' => 'thinkphp', 'status' => 1]);
    
    // 更新记录
    Db::table('think_data')
        ->where('id', 18)
        ->update(['name' => "hello"]);
    
    // 查询数据
    $list = Db::table('think_data')
        ->where('id', 18)
        ->select();
    
    // 删除数据
    Db::table('think_data')
        ->where('id', 18)
        ->delete();
    

    由于在数据库配置文件中添加了数据表的前缀为think_,因此table方法就可以改为name方法。

    // 查询数据
    $list = Db::name('data')
        ->where('id', 18)
        ->select();
    dump($list);
    

    还可以通过助手函数进一步简化代码。

    // 查询数据
    $list = $db->where('id', 20)->select();
    dump($list);
    
    • 5、链式操作
    // 查询十个满足条件的数据 并按照id倒序排列
    $list = Db::name('data')
        ->where('status', 1)
        ->field('id,name')
        ->order('id', 'desc')
        ->limit(10)
        ->select();
    dump($list);
    

    链式操作不分先后,只要放在select之前调用就可以。

    • 6、事务支持
      使用transaction方法,只需要把需要执行的事务操作封装到闭包里面即可自动完成事务。
    Db::transaction(function () {
        Db::table('think_user')
            ->delete(1);
        Db::table('think_data')
            ->insert(['id' => 28, 'name' => 'thinkphp', 'status' => 1]);
    });
    

    还可以手动控制提交事务:

    // 启动事务
    Db::startTrans();
    try {
        Db::table('think_user')
            ->delete(1);
        Db::table('think_data')
            ->insert(['id' => 28, 'name' => 'thinkphp', 'status' => 1]);
        // 提交事务
        Db::commit();
    } catch (\Exception $e) {
        // 回滚事务
        Db::rollback();
    }
    

    二、查询语言

    • 1、查询表达式
      find方法用来查询满足要求的第一条结果,存在就返回一个以为数组,否则默认返回null,也可以抛出异常;
      select方法用来查询数据集,存在返回一个二维数组,否则返回空数组,也可以抛出异常。

    可以支持的查询表达式包括如下:
    EQ、= 等于(=)
    NEQ、<> 不等于(<>)
    GT、> 大于(>)
    EGT、>= 大于等于(>=)
    LT、< 小于(<)
    ELT、<= 小于等于(<=)
    LIKE 模糊查询
    [NOT] BETWEEN (不在)区间查询
    [NOT] IN (不在)IN 查询
    [NOT] NULL 查询字段是否(不)是NULL
    [NOT] EXISTS EXISTS查询
    EXP 表达式查询,支持SQL语法

    • 2、批量查询
    $result = Db::name('data')
    // name 中包含think
        ->where('name', 'like', '%think%')
        ->where('id', ['in', [1, 2, 3]], ['between', '5,8'], 'or')
        ->limit(10)
        ->select();
    dump($result);   
    

    使用批量方式:

    $result = Db::name('data')
        ->where([
            'id'   => [['in', [1, 2, 3]], ['between', '5,8'], 'or'],
            'name' => ['like', '%think%'],
        ])->limit(10)->select();
    dump($result);  
    
    • 3、快速查询
      当多个字段需要使用相同条件时:
    $result = Db::name('data')
        ->where('id&status', '>', 0)
        //->where('id|status', '>', 0)
        ->limit(10)
        ->select();
    dump($result);   
    
    • 4、视图查询
      快速的进行多表查询
    $result = Db::view('user','id,name,status')
        ->view('profile',['name'=>'truename','phone','email'],'profile.user_id=user.id')
        ->where('status',1)
        ->order('id desc')
        ->select();
    dump($result);
    
    • 5、闭包查询
      直接用方能find和select方法进行必包查询
    $result = Db::name('data')->select(function ($query) {
        $query->where('name', 'like', '%think%')
            ->where('id', 'in', '1,2,3')
            ->limit(10);
    });
    dump($result);
    //相当于SELECT * FROM `think_data` WHERE `name` LIKE '%think%' AND `id` IN ('1','2','3') LIMIT 10
    
    • 6、使用Query对象
      将封装后的Query对象传入select方法,使用Query对象的话,select方法之前调用的任何的链式操作都是无效。
    $query = new \think\db\Query;
    $query->name('city')->where('name', 'like', '%think%')
        ->where('id', 'in', '1,2,3')
        ->limit(10);
    $result = Db::select($query);  
    dump($result);
    
    • 7、获取数值
      获取表中某行的某个值时,用value
    // 获取id为8的data数据的name字段值
    $name = Db::name('data')
        ->where('id', 8)
        ->value('name');
    dump($name);
    
    • 8、获取列数据
    // 获取data表的name列
    $list = Db::name('data')
        ->where('status', 1)
        ->column('name');
    dump($list);  
    
    • 9、聚合查询

    count 统计数量 统计的字段名(可选)
    max 获取最大值 统计的字段名(必须)
    min 获取最小值 统计的字段名(必须)
    avg 获取平均值 统计的字段名(必须)
    sum 获取总分 统计的字段名(必须)

    • 10、日期查询
    // 查询创建时间大于2016-1-1的数据
    $result = Db::name('data')
        ->whereTime('create_time', '>', '2016-1-1')
        ->select();
    dump($result);
    
    // 查询本周添加的数据
    $result = Db::name('data')
        ->whereTime('create_time', '>', 'this week')
        ->select();
    dump($result);
    
    // 查询最近两天添加的数据
    $result = Db::name('data')
        ->whereTime('create_time', '>', '-2 days')
        ->select();
    dump($result);
    
    // 查询创建时间在2016-1-1~2016-7-1的数据
    $result = Db::name('data')
        ->whereTime('create_time', 'between', ['2016-1-1', '2016-7-1'])
        ->select();
    dump($result);
    
    • 11、分块查询
      当查询数据量比较大时,可以将这些数据分块进行操作。
      如:将1万条数据分成100次处理,每次处理100条
    Db::name('data')
        ->where('status', '>', 0)
        ->chunk(100, function ($list) {
            // 处理100条记录
            foreach($list as $data){
                
            }
        });
    

    相关文章

      网友评论

          本文标题:TP5数据库操作

          本文链接:https://www.haomeiwen.com/subject/jzjhrxtx.html