1、数据库配置

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

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

$result = Db::execute('insert into think_data (id, name ,status) values (5, "thinkphp",1)');// 增

$result = Db::execute('delete from think_data where id = 5 ');// 删

$result = Db::execute('update think_data set name = "framework" where id = 5 ');// 改

$result = Db::query('select * from think_data where id = 5');// 查
//切换数据库查询
'db1' => [
// 数据库配置1
...
],
'db2' => [
// 数据库配置2
...
],
// 链接
Db::connent('db1')->query('select * from think_users');
Db::connent('db2')->query('select * from think_data');

3、查询构造器

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

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

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

5、事务支持

...

6、查询语言

1、某个字段是否等于某个值
$result = Db::name('data')
->where('id', 1)
->find();
SQL:SELECT * FROM `think_data` WHERE `id` = 1 2、查询id大于等于1的数据
$result = Db::name('data')
->where('id', '>=', 1)
->limit(10)
->select();
SQL:SELECT * FROM `think_data` WHERE `id` >= 1 LIMIT 10 3、查询某个字段是否为NULL
$result = Db::name('data')
->where('name', 'null')
->select();
SQL:SELECT * FROM `think_data` WHERE `name` IS NULL 4、批量查询
$result = Db::name('data')
->where([
'id' => ['between', '1,3'],
'name' => ['like', '%think%'],
])->select();
SQL:SELECT * FROM `think_data` WHERE `id` BETWEEN '1' AND '3' AND `name` LIKE '%think%' 5、快捷查询
$result = Db::name('data')
->where('id&status', '>', 0)
->limit(10)
->select();
SQL:SELECT * FROM `think_data` WHERE ( `id` > 0 AND `status` > 0 ) LIMIT 10 6、视图查询
$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();
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 7、闭包查询:find、select
$result = Db::name('data')->select(function ($query) {
$query->where('name', 'like', '%think%')
->where('id', 'in', '1,2,3')
->limit(10);
});
SQL:SELECT * FROM `think_data` WHERE `name` LIKE '%think%' AND `id` IN ('1','2','3') LIMIT 10

7、获取某列数据

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

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

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

8、聚合查询

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

9、字符串查询

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

10、时间查询

// 查询创建时间大于2016-1-1的数据
$result = Db::name('data')
->whereTime('create_time', '>', '2016-1-1')
->select();// 查询本周添加的数据
$result = Db::name('data')
->whereTime('create_time', '>', 'this week')
->select();// 查询最近两天添加的数据
$result = Db::name('data')
->whereTime('create_time', '>', '-2 days')
->select();// 查询创建时间在2016-1-1~2016-7-1的数据
$result = Db::name('data')
->whereTime('create_time', 'between', ['2016-1-1', '2016-7-1'])
->select();// 获取今天的数据
$result = Db::name('data')
->whereTime('create_time', 'today')
->select();// 获取昨天的数据
$result = Db::name('data')
->whereTime('create_time', 'yesterday')
->select();// 获取本周的数据
$result = Db::name('data')
->whereTime('create_time', 'week')
->select(); // 获取上周的数据
$result = Db::name('data')
->whereTime('create_time', 'last week')
->select();

11、分块查询

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

《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. jQuery 查找父节点 parents()与closest()

    parents()由内向外,直到最高的父节点停止查找,返回的父节点是多个 closest()由内向外查找,当找到符合规则的一个,则不再查找,返回的是0或1个

  2. 长春理工大学第十四届程序设计竞赛F Successione di Fixoracci——找规律&&水题

    题目 链接 题意:给出x数列的定义: $T_0 = a$ $T_1 = b$ $T_n = T_{n-2} \bigoplus T_{n-1} $ 求第 $n$ 项( $0 \leqslant a,b ...

  3. BZOJ 1845: [Cqoi2005] 三角形面积并 (辛普森积分)

    大力辛普森积分 精度什么的搞了我好久- 学到了Simpson的一个trick 深度开11,eps开1e-4.跑的比有些扫描线还快- CODE #include <bits/stdc++.h> ...

  4. Luogu P1198 [JSOI2008]最大数 单调队列/ST表

    开一个单调队列,下标递增,值递减. 然后在上面二分最大数. 如果加上并查集可以做到接近线性. 还有一种是插入一个数然后,从后向前更新ST表. #include<cstdio> #inclu ...

  5. *p++=i怎么理解?

    #include<stdio.h> void fibonacci(int *p,int n) { *p++=1; *p++=1; while(n>2) { *p++=*(p-1)+* ...

  6. ie浏览器中时间转换

    var begintime = $("#start").val(); var lastLoginTimeStart =new Date(begintime).getTime();/ ...

  7. Codeforces 678E. Another Sith Tournament(概率DP,状压)

    Codeforces 678E. Another Sith Tournament 题意: n(n<=18)个人打擂台赛,给定任意两人对决的胜负概率,比赛规则:可指定一人作为最开始的擂主,每次可指 ...

  8. 【分类模型评判指标 二】ROC曲线与AUC面积

    转自:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80499031 略有改动,仅供个人学习使用 简介 ROC曲线与AUC面积均是用来 ...

  9. 服务器多进程powershell导致服务器瘫痪问题解决

    1.公司服务器多次无法访问,经查多由于开启了多个powershell进程,网上查询是被挖矿了,可通过将powershell应用程序重命名解决. 2.然而重命名的时候发现需要trustedInstall ...

  10. Leetcode题目48.旋转图像(中等)

    题目描述: 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1 ...