《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下进行学习. 快速入门第三节 获取当前的请求 ...
随机推荐
- windows 切换git远程仓库地址后 git push 提示Authentication failed
git切换远程分支: 方法一: git remote set-url origin 你新的远程仓库地址 方法二: git remote rm origin git remote add origin ...
- 配置NFS共享
NFS(网络文件系统)-------> linux与linux平台 服务器端: 1.安装软件nfs-utils(服务:nfs-server) 2.创建共享目录:mkdir /nfs_dir 3. ...
- [引用]MATLAB中的fft后为何要用fftshift
原文地址:MATLAB中的fft后为何要用fftshift fft是一维傅里叶变换,即将时域信号转换为频域. fftshift是针对频域的,将FFT的DC分量移到频谱中心,重新排列fft,fft1和… ...
- 使用ImageProcessor、CodeCarvings.Piczard组件生成缩略图和添加水印
技术栈: 1.ImageProcessor(专业图像处理,不能合成水印,NetCore中有它的升级版ImageSharp目前是预览包) 2.CodeCarvings.Piczard(缩略图,水印都能搞 ...
- Python基础之基本数据类型的总结
基本数据类型的总结 1. 按照存储空间的占用分(从低到高) 数字 字符串 集合:无序,即无序存索引相关信息 元组:有序,需要存索引相关信息,不可变 列表:有序,需要存索引相关信息,可变,需要处理数据的 ...
- mybatis-puls 字段为null时候的更新问题
在mybatis-puls重设置的全局更新策略 为null的字段忽略更新.但是在某些业务需求下面,可能需要某些字段更新为null值.那么改如何设置 1, 在你的实体属性上面单独添加需要更新nu l l ...
- Java图片裁剪
public static void main(String[] args) throws IOException { String path = "C:/Users/yang/Deskto ...
- 15.反转链表 Java
题目描述 输入一个链表,反转链表后,输出新链表的表头. 思路 本题的关键就是在于对next域的赋值,同时对下一个节点进行保存,然后对把下一个节点赋给新的节点,这样依次循环完所有的节点.每次使新插入的节 ...
- HDU2795线段树入门 简单查询和修改
http://acm.hdu.edu.cn/showproblem.php?pid=2795 #include<iostream> using namespace std; ; int h ...
- 在windows系统搭建Flutter开发环境
开发环境搭建(Windows) 系统要求 设置FLutter镜像(非必须) 获取Flutter SDK Android开发环境设置 安装Flutter插件 系统要求 在Windows上要安装并运行Fl ...