《ThinkPHP 5.0快速入门》 数据库、查询语言
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快速入门》 数据库、查询语言的更多相关文章
- 《ThinkPHP 5.0快速入门》 请求和响应
1.请求对象 //传统调用$request = Request::instance();//实例化对象 $request->url();//获取当前的域名 //继承think\Controlle ...
- 《ThinkPHP 5.0快速入门》 基础和路由
一.基础: 创建项目:conposer create-project topthink/think tp5 --prefer-dist 创建项目模块:php think build --module ...
- python3.5+django2.0快速入门(二)
昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...
- python3.5+django2.0快速入门(一)
因为这篇教程需要用到anaconda的一些操作,如果还不懂anaconda的操作的同学可以看下这篇文章python 入门学习之anaconda篇. 创建python3+的开发环境 直接在终端输入:co ...
- ExtJs 6.0+快速入门,ext-bootstrap.js文件的分析,各版本API下载
ExtJS6.0+快速入门+API下载地址 ExtAPI 下载地址如下,包含各个版本 http://docs.sencha.com/misc/guides/offline_docs.html 1.使用 ...
- TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN
原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...
- Thinkphp5.0快速入门笔记(1)
学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...
- Thinkphp5.0快速入门笔记(2)
学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. 示例建立新的模块和控制器 在a ...
- Thinkphp5.0快速入门笔记(3)
学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. 快速入门第三节 获取当前的请求 ...
随机推荐
- ACM-ICPC 2016 沈阳赛区现场赛 I. The Elder && HDU 5956(斜率DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5956 题意:一颗树上每条边有个权值,每个节点都有新闻要送到根节点就是1节点,运送过程中如果不换青蛙就是 ...
- blur([[data],fn]) 当元素失去焦点时触发 blur 事件。
blur([[data],fn]) 概述 当元素失去焦点时触发 blur 事件.大理石平台生产厂 这个函数会调用执行绑定到blur事件的所有函数,包括浏览器的默认行为.可以通过返回false来防止触发 ...
- java超大文件上传
上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败. 一开始以为是session过期或者文件大小受系统限制,导致的错误. 查看了系统的配置文件没有看到文件大小限制, web.xml中se ...
- 路由器配置——基于区域的OSPF简单认证
一.实验目的:掌握区域的OSPF简单认证 二.拓扑图: 三.具体步骤配置: (1)R1路由器配置 Router>enable Router#configure terminal Enter co ...
- TTTTTTTTTTTTTTTTT Gym 100851J Jump 构造
题意:首先你输入一个数字n(偶数)(n<=1000),电脑则自动生成一个长度为n的01字符串,你每次可以构造出一个长度为n的01字符串,输入给电脑后电脑进行判定,如果你的字符串与电脑的字符串完全 ...
- 「CF724G」Xor-matic Number of the Graph「线性基」
题意 求所有点对\(u,v\),\(u\)到\(v\)所有不同的异或路径的异或值之和,对\(10^9+7\)取模 题解 求出一个dfs树,那么\(u\)到\(v\)的路径一定是树上路径异或一些环.这些 ...
- 第02组团队Git现场编程实战
GitHub仓库地址 click here 1.组员职责分工 组员 职责分工 黄智.赵镇 百度地图API使用 潘松波.颜志鹏 写分别测评福州人均消费50以下,50-100.100-200.200以上最 ...
- C和汇编混联合的问题
关键时刻出现了问题: 关于packed的问题,一定要注意这个问题http://stackoverflow.com/questions/4306186/structure-padding-and-str ...
- Java学习笔记(持续更新ing)
1.在读入字符串时: str = sc.nextLine(); //读入一行 str = sc.next(); ...
- node中的http内置模块
Node.js开发的目的就是为了用JavaScript编写Web服务器程序.因为JavaScript实际上已经统治了浏览器端的脚本,其优势就是有世界上数量最多的前端开发人员.如果已经掌握了JavaSc ...