1、数据库配置

  1. return [
  2. 'type' => 'mysql',// 数据库类型
  3. 'hostname' => '127.0.0.1',// 服务器地址
  4. 'database' => 'test',// 数据库名
  5. 'username' => 'root',// 数据库用户名
  6. 'password' => '',// 数据库密码
  7. 'hostport' => '',// 数据库连接端口
  8. 'params' => [],// 数据库连接参数
  9. 'charset' => 'utf8',// 数据库编码默认采用utf8
  10. 'prefix' => '',// 数据库表前缀
  11. 'debug' => true,// 数据库调试模式
  12. ];
  1. //长连接使用
    return [
  2. 'database' => 'demo', // 数据库名
  3. 'prefix' => 'think_', // 数据库表前缀
  4. 'params' => [ // 数据库连接参数
  5. // 使用长连接
  6. \PDO::ATTR_PERSISTENT => true,
  7. ],
  8. ];
    //模块的数据库配置文件中只需要配置和全局数据库配置文件差异的部分,相同的不需要重复配置。

2、原生查询:包括query和execute,分别用于查询和写入

  1. $result = Db::execute('insert into think_data (id, name ,status) values (5, "thinkphp",1)');// 增
  2.  
  3. $result = Db::execute('delete from think_data where id = 5 ');// 删
  4.  
  5. $result = Db::execute('update think_data set name = "framework" where id = 5 ');// 改
  6.  
  7. $result = Db::query('select * from think_data where id = 5');// 查
  1. //切换数据库查询
  2. 'db1' => [
  3. // 数据库配置1
  4. ...
  5. ],
  6. 'db2' => [
  7. // 数据库配置2
  8. ...
  9. ],
  10. // 链接
  11. Db::connent('db1')->query('select * from think_users');
  12. Db::connent('db2')->query('select * from think_data');

3、查询构造器

  1. // 插入记录
  2. Db::name('data')
  3. ->insert(['id' => 18, 'name' => 'thinkphp']);
  4.  
  5. // 更新记录
  6. Db::name('data')
  7. ->where('id', 18)
  8. ->update(['name' => "framework"]);
  9.  
  10. // 查询数据$list = Db::name('data')
  11. ->where('id', 18)
  12. ->select();
  13.  
  14. // 删除数据
  15. Db::name('data')
  16. ->where('id', 18)
  17. ->delete();
  18.  
  19. // 插入多条记录
    Db::name('data')
    ->insertAll([['id'=>19,'name'=>'张三'],['id'=>20,'name'=>'李四'],...]);
  20.  
  21. //db助手函数默认会每次重新连接数据库,因此应当尽量避免多次调用。

4、链式操作:链式操作不分前后,但必须在select()等操作前面

  1. // 查询十个满足条件的数据 并按照id倒序排列
  2. $list = Db::name('data')
  3. ->where('status', 1)
  4. ->field('id,name')
  5. ->order('id', 'desc')
  6. ->limit(10)
  7. ->select();

5、事务支持

...

6、查询语言

  1. 1、某个字段是否等于某个值
  2. $result = Db::name('data')
  3. ->where('id', 1)
  4. ->find();
  5. SQL:SELECT * FROM `think_data` WHERE `id` = 1
  6.  
  7. 2、查询id大于等于1的数据
  8. $result = Db::name('data')
  9. ->where('id', '>=', 1)
  10. ->limit(10)
  11. ->select();
  12. SQL:SELECT * FROM `think_data` WHERE `id` >= 1 LIMIT 10
  13.  
  14. 3、查询某个字段是否为NULL
  15. $result = Db::name('data')
  16. ->where('name', 'null')
  17. ->select();
  18. SQL:SELECT * FROM `think_data` WHERE `name` IS NULL
  19.  
  20. 4、批量查询
  21. $result = Db::name('data')
  22. ->where([
  23. 'id' => ['between', '1,3'],
  24. 'name' => ['like', '%think%'],
  25. ])->select();
  26. SQL:SELECT * FROM `think_data` WHERE `id` BETWEEN '1' AND '3' AND `name` LIKE '%think%'
  27.  
  28. 5、快捷查询
  29. $result = Db::name('data')
  30. ->where('id&status', '>', 0)
  31. ->limit(10)
  32. ->select();
  33. SQL:SELECT * FROM `think_data` WHERE ( `id` > 0 AND `status` > 0 ) LIMIT 10
  34.  
  35. 6、视图查询
  36. $result = Db::view('user','id,name,status')
  37. ->view('profile',['name'=>'truename','phone','email'],'profile.user_id=user.id')
  38. ->where('status',1)
  39. ->order('id desc')
  40. ->select();
  41. SQL:SELECT user.id,user.name,user.status,profile.name AS truename,profile.phone,profile.email FROM think_user user INNER JOIN think_profile profile ON profile.user_id=user.id WHERE user.status = 1 order by user.id desc
  42.  
  43. 7、闭包查询:findselect
  44. $result = Db::name('data')->select(function ($query) {
  45. $query->where('name', 'like', '%think%')
  46. ->where('id', 'in', '1,2,3')
  47. ->limit(10);
  48. });
  49. SQL:SELECT * FROM `think_data` WHERE `name` LIKE '%think%' AND `id` IN ('1','2','3') LIMIT 10

7、获取某列数据

  1. $list = Db::name('data')
  2. ->where('status', 1)
  3. ->column('name');
  4. array (size=5)
  5. 0 => string 'thinkphp'1 => string 'onethink'2 => string 'topthink'3 => string 'kancloud'

  6. $list = Db::name('data')
  7. ->where('status', 1)
  8. ->column('name', 'id');
  9. array (size=5)
  10. 1 => string 'thinkphp'2 => string 'onethink'3 => string 'topthink'4 => string 'kancloud'

  11. $list = Db::name('data')
  12. ->where('status', 1)
  13. ->column('*', 'id');
  14. array (size=5)
  15. 1 => array (size=3)
  16. 'id' => int 1'name' => string 'thinkphp''status'=> int 12 => array (size=3)
  17. 'id' => int 1'name' => string 'onethink''status'=> int 13 => array (size=3)
  18. 'id' => int 1'name' => string 'topthink''status'=> int 14 => array (size=3)
  19. 'id' => int 1'name' => string 'kancloud''status'=> int 1

8、聚合查询

  1. // 统计data表的数据
  2. $count = Db::name('data')
  3. ->where('status', 1)
  4. ->count();// 统计user表的最高分
  5. $max = Db::name('user')
  6. ->where('status', 1)
  7. ->max('score');

9、字符串查询

  1. $result = Db::name('data')
  2. ->where('id > :id AND name IS NOT NULL', ['id' => 10])
  3. ->select();
  4. SQL:SELECT * FROM `think_data` WHERE ( id > '10' AND name IS NOT NULL )

10、时间查询

  1. // 查询创建时间大于2016-1-1的数据
  2. $result = Db::name('data')
  3. ->whereTime('create_time', '>', '2016-1-1')
  4. ->select();// 查询本周添加的数据
  5. $result = Db::name('data')
  6. ->whereTime('create_time', '>', 'this week')
  7. ->select();// 查询最近两天添加的数据
  8. $result = Db::name('data')
  9. ->whereTime('create_time', '>', '-2 days')
  10. ->select();// 查询创建时间在2016-1-1~2016-7-1的数据
  11. $result = Db::name('data')
  12. ->whereTime('create_time', 'between', ['2016-1-1', '2016-7-1'])
  13. ->select();// 获取今天的数据
  14. $result = Db::name('data')
  15. ->whereTime('create_time', 'today')
  16. ->select();// 获取昨天的数据
  17. $result = Db::name('data')
  18. ->whereTime('create_time', 'yesterday')
  19. ->select();// 获取本周的数据
  20. $result = Db::name('data')
  21. ->whereTime('create_time', 'week')
  22. ->select(); // 获取上周的数据
  23. $result = Db::name('data')
  24. ->whereTime('create_time', 'last week')
  25. ->select();

11、分块查询

  1. //使用分块查询,可以把1万条记录分成100次处理,每次处理100条记录,代码示例如下:
  2. Db::name('data')
  3. ->where('status', '>', 0)
  4. ->chunk(100, function ($list) {
  5. // 处理100条记录
  6. foreach($list as $data){
  7.  
  8. }
  9. });
  10.  
  11. //第二个参数可以是有效的callback类型,包括使用闭包函数。
  12. //系统会按照主键顺序查询,每次查询100条,如果你不希望使用主键进行查询,或者没有主键的话,则需要指定查询的排序字段(但必须是唯一的),例如:
  13. Db::name('user')
  14. ->where('status', '>', 0)
  15. ->chunk(100, function ($list) {
  16. // 处理100条记录
  17. foreach($list as $data){
  18.  
  19. }
  20. }, 'uid');
  21.  
  22. //然后交给callback进行数据处理,处理完毕后继续查询下一个100条记录,如果你需要在中途中断后续的查询,只需要在callback方法调用中返回false即可,例如:
  23. Db::name('data')
  24. ->where('status','>',0)
  25. ->chunk(100,function($list){
  26. foreach($list as $data){
  27. // 返回false则中断后续查询
  28. return false;
  29. }
  30. });

《ThinkPHP 5.0快速入门》 数据库、查询语言的更多相关文章

  1. 《ThinkPHP 5.0快速入门》 请求和响应

    1.请求对象 //传统调用$request = Request::instance();//实例化对象 $request->url();//获取当前的域名 //继承think\Controlle ...

  2. 《ThinkPHP 5.0快速入门》 基础和路由

    一.基础: 创建项目:conposer create-project topthink/think tp5 --prefer-dist 创建项目模块:php think build --module ...

  3. python3.5+django2.0快速入门(二)

    昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...

  4. python3.5+django2.0快速入门(一)

    因为这篇教程需要用到anaconda的一些操作,如果还不懂anaconda的操作的同学可以看下这篇文章python 入门学习之anaconda篇. 创建python3+的开发环境 直接在终端输入:co ...

  5. ExtJs 6.0+快速入门,ext-bootstrap.js文件的分析,各版本API下载

    ExtJS6.0+快速入门+API下载地址 ExtAPI 下载地址如下,包含各个版本 http://docs.sencha.com/misc/guides/offline_docs.html 1.使用 ...

  6. TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN

    原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...

  7. Thinkphp5.0快速入门笔记(1)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...

  8. Thinkphp5.0快速入门笔记(2)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. 示例建立新的模块和控制器 在a ...

  9. Thinkphp5.0快速入门笔记(3)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. 快速入门第三节 获取当前的请求 ...

随机推荐

  1. oracle之函数-数字,日期,转换,字符串,其他

    -----------------------------oracle数据库函数----------------------------------------数学函数***select abs(-1 ...

  2. 2019icpc沈阳网络赛 D Fish eating fruit 树形dp

    题意 分别算一个树中所有简单路径长度模3为0,1,2的距离和乘2. 分析 记录两个数组, \(dp[i][k]\)为距i模3为k的子节点到i的距离和 \(f[i][k]\)为距i模3为k的子节点的个数 ...

  3. trie树(字典树)的部分简单实现

    什么是trie树(字典树)? trie树是一种用于快速检索的多叉树结构.和二叉查找树不同,在trie树中,每个结点上并非存储一个元素. trie树把要查找的关键词看作一个字符序列.并根据构成关键词字符 ...

  4. windos系统下使tomcat按天生成控制台日志catalina.out

    windos系统下的tomcat默认不会记录控制台catalina.out日志,只有访问日志,不便于排错 修改启动文件 1.打开bin下面的startup.bat文件,把 call "%EX ...

  5. 重写equals为啥需要重写hashCode

    描述 以前一直记得重写equals要把hashCode也要重写了,但是一直也是没有搞明白, 最近在看一些东西,觉得有必要记录一下. 了解一下equals equals是Object类的方法, equa ...

  6. 【转】mysql基础汇总

    mysql基础知识语法汇总整理(二)  原文:https://www.cnblogs.com/cxx8181602/p/9525950.html 连接数据库操作 /*连接mysql*/ mysql - ...

  7. legend3---8、烦请节约时间

    legend3---8.烦请节约时间 一.总结 一句话总结: 时间不要浪费在垃圾情绪和无效社交上面. 1.商标不能以个人的名义注册? 可以先注册个体工商户,然后再可以注册商标 2.注册一个商标大概花多 ...

  8. 在HearthRanger中使用Silverfish

    I'm new here and have never used this bot before. But a few days ago I tried it and I liked it :) I ...

  9. 定位上下文(补充css的position属性)

    ]把元素的position属性设定为relative.absolute或fixed后,继而可以使用TRBL属性,相对于另一个元素移动该元素的位置.这里的“另一个元素”,就是该元素的定位上下文. 绝对定 ...

  10. JVM学习笔记之认识JDK(一)

    1. HotSpot VM: HotSpot VM是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机. 什么是HotSpot VM & 深入理解Java虚拟机 ...