Thinkphp 常用数据库操作
数据库操作官方文档:
1.查询数据
// ! 1.单条数据查询 : find() // * 1.1 table方法必须指定完整的数据表名 // $users = Db::table('user')->find(4); // $users = Db::table('user')->where('id', 1)->find(); // $users = Db::table('user')->where('name', '老李')->find(); // $users = Db::table('user')->where('id','>',3)->find(); // // * 1.2 数组条件 // $users = Db::table('user')->where( // [ // 'name' => '老马', // 'id' => 6 // ] // )->find(); // * 1.3 链式条件 // $users = Db::table('user') // ->where('id','>',6) // ->where('name','=', '老马') // ->find(); // print_r($users); // ? 更多查询表达式,参见官方手册:https://www.kancloud.cn/manual/thinkphp6_0/1037537 // ! 2.多条数据查询 select() // $users = Db::table('user')->select(); // $users = Db::table('user')->where('id', '>', 3)->select(); //* 2.1 查询结果转数组 // $users = Db::table('user')->where('id', '>', 3)->select()->toArray(); // * 2.2 返回指定字段 field // $users = Db::table('user')->field('id,name')->where('id', '>', 3)->select()->toArray(); // $users = Db::table('user')->field('id as uid,name')->where('id', '>', 3)->select()->toArray(); // $users = Db::table('user')->where('name', '老马')->select(); // * 2.3 查询某字段,返回一维数组 // $users = Db::table('user')->where('id','>',3)->column('name'); // * 2.4 查询某个值,返回字符串 // $users = Db::table('user')->where('id','=',3)->value('name'); // print_r($users); // * 2.6 将数据库中某行复制到新列 // $users = Db::table('user')->select(); // foreach($users as $user) // { // $rst = Db::table('user')->where('id', $user['id'])->update(['nickname' => $user['name']]); // } // print_r($rst); // * 2.7 查询条件 '=' , '!=' , '<>' , '>' , '<' , 'like' // $users = Db::table('user')->where('name','like','%张%')->select(); // $users = Db::table('user')->where('name','like','_张_')->select(); // print_r($users); // * 2.8 区间查询 between && not between // $users = Db::table('user')->where('id','between','8,12')->select(); // print_r($users); // * 2.9 指定查询 in // $users = Db::table('user')->where('id','in','5,8,9')->select(); // print_r($users); // * 2.10 table() 包含表前缀,name()不包含表前缀,但需要在数据库配置中,配置前缀 // $adv = Db::table('adver')->order('sort desc,id desc')->select(); // print_r($adv); // * 2.11 翻页\获取多少条,limit(),1个参数,表示获取多少条,2个参数表示,从第一个数字开始,获取多少条 // $shops = Db::table('shop')->limit(10,10)->order('id')->select()->toArray(); // ? limit方法需要计算页码起始数,不如page()方法方便 // $shops = Db::table('shop')->page(4,10)->order('id')->select()->toArray(); // $shops = Db::table('shop')->page(4)->limit(10)->order('id')->select()->toArray(); // print_r($shops); // * 2.12 聚合查询 // $count = Db::table('user')->count(); // $count = Db::table('shop')->count('id'); // $count = Db::table('shop')->max('price'); // $count = Db::table('shop')->where('price','>',2000)->max('sales'); // * 查询已完成订单实际付款总金额 $count = Db::table('order')->where('status','=',9)->sum('sj_price'); print_r($count);
2.添加数据
// ! 3. 添加数据 // $data = [ // 'name' => '老张2', // 'sex' => 1, // 'age' => 30, // 'phone' => '13902233333' // ]; // 成功:返回 1 ,失败不返回 // $result = Db::table('user')->insert($data); // if ($result) { // return '添加成功'; // } else { // return '添加失败'; // } // 添加成功后,返回 user 主键 (这里返回:id) // $id = Db::table('user')->insertGetId($data); // if (empty($id)) { // return '添加失败'; // } else { // print_r($id); // }
3.修改数据
// ! 4. 修改数据,限定条件 // $data = [ // 'name' => '小丽', // 'sex' => 0, // 'age' => 30, // 'phone' => '13902233333' // ]; // $update = Db::table('user')->where('id', '=', 1)->update($data); // * 修改单独的值,用自增 inc + // $update = Db::table('user')->where('id', 1)->inc('loginNum', 1)->update();
4.删除数据
// ! 5. 删除 Delete , 删除必须增加条件 , 不要用删除功能 // $result = Db::table('user')->where('id', '=', 2)->delete(); // if ($result) { // return '删除成功'; // } else { // return '删除失败'; // } // * 软删除 useSoftDelete // $result = Db::table('user')->where('id',5)->useSoftDelete('status',99)->delete(); // print_r($result);
5. 数据集操作
// ! 6. 数据集操作 // * 删除数据集最后一条数据,返回被删除的数据 // $users = Db::table('user')->select(); // print_r($users->pop()); // * 指定字段排序 // $users = Db::table('user')->select(); // print_r($users); // $usersAge = $users->order('age'); // print_r($usersAge); // * 判断是否为空 // $news = Db::table('news')->select(); // if($news->isEmpty()) // { // return '数据集为空'; // } else { // print_r($news); // }
6. 调试语句
// * getLastSql() : 打印原生SQL,执行SQL后再打印 // $user = Db::table('order') // ->where('status', '>=',2) // ->sum('sj_price'); // print_r($user); // echo Db::getLastSql(); // * fetchSql() : 执行过程中打印原生SQL // $user = Db::table('order') // ->where('status', '>=',2) // ->fetchSql() // ->sum('sj_price'); // print_r($user);
7. 多数据库操作
// * connect() : 方法,切换多数据库 // $order = Db::table('order')->select(); // $order = Db::connect('tpshop')->table('order')->select(); // print_r($order);
8. 数据库事务
// * startTrans 事务开启 // ? 事务要求 数据库引擎是: InnoDB, 不支持MyISAM Db::startTrans(); $data = [ 'ooid' => '1234567890', 'uid' => 1, 'price' => 111, 'phone' => '18809511111', 'name' => '欧阳克', 'sj_price' => 111, ]; $oid = Db::table('order')->insertGetID($data); // * 事务提交: commit ; 事务回滚: rollback if (empty($oid)) { Db::rollback(); } // 订单联动提交,失败进行事物回滚 $details = Db::table('order_details')->insert([ 'oid' => $oid, 'shop_id' => 1, 'price' => 111 ]); $details = 0; if (empty($details)) { Db::rollback(); } Db::commit();