《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下进行学习. 快速入门第三节 获取当前的请求 ...
随机推荐
- 正整数n拆分成几个不同的平方数——DFS&&打表
考虑将正整数n拆分成几个不同的平方数之和,比如30=1^2 + 2^2 + 5^2=1^2 + 2^2 + 3^2 + 4^2,而8不存在这样的拆分. #include<bits/stdc++. ...
- JSONOjbect,对各种属性的处理
import com.alibaba.fastjson.JSONObject; public class JsonTest { public static void main(String[] arg ...
- am335x system upgarde ddr3 capacity configuration base on TI DDR3 Software Leveling Tool (二十)
follow test is use ti DDR Software Leveling op log. AM335x DDR3 Software Leveling -- Version: Beta ...
- zip:命令行下zip压缩/解压缩
在Ubuntu 18.04下验证,造冰箱的大熊猫@cnblogs 2019/6/6 序号 功能 命令行输入的命令 1 压缩单个文件 zip package.zip file 2 压缩多个文件 zip ...
- BZOJ 4017 小 Q 的无敌异或 ( 树状数组、区间异或和、区间异或和之和、按位计贡献思想 )
题目链接 题意 : 中文题 分析 : 首先引入两篇写的很好的题解 题解一.题解二 听说这种和异或相关区间求和的问题都尽量按位考虑 首先第一问.按二进制位计贡献的话.那么对于第 k 位而言 其贡献 = ...
- mac 使用express -e ./
利用express构建一个简单的Node项目 命令: express -e ./ -e表示使用ejs作为模板 ./表示当前目录中 使用上面的命令之前我们应该使用npm安装express框架 sudo ...
- CSP-S 模拟测试 45 题解
由于咕掉的题解太多了,所以只能趁改完不动题的时间,来补补坑qwq,还是太弱了. 考试过程: 到新机房的第一次考试,貌似海星? 第一题一开始就觉得是个贪心,但以为所有小怪兽都要打完,所以想复杂了,但后来 ...
- php 一段 shmop
$size = 1024*1024; $shm_key = ftok(__FILE__, 't'); $shm_id = shmop_open($shm_key, "c", 064 ...
- Django-权限管理与路径导航
1.url权限管理 设计表 1.设计表 系统一共有多少个路径: 有哪些用户使用: 用户在公司的角色: 对角色进行权限分配(什么样的角色可以访问什么样的路径): 2.往表中添加数据,分配角色权限 3.登 ...
- [python]有中文字符程序异常的解决方案
一. 含有中文字符无法运行 在python3中用的是Unicode编码,Unicode号称万国码,可以向所有的编码进行兼容.不会出现这种问题. Python2中使用的是ASCII编码,会出现这种问题. ...