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. Python 练习实例1

    Python 练习实例1 题目:有四个数字:1.2.3.4,能组成多少个互不相https://www.xuanhe.net/同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都 ...

  2. Java事务不回滚的原因总结

    1.首先要检查数据的引擎,InnoDB支持事务,MyIsam不支持事务 2.  默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚.     spring aop  异常 ...

  3. Maximum GCD(UVA 11827)

    Problem:Given the N integers, you have to find the maximum GCD (greatest common divisor) of every po ...

  4. LG2216 理想的正方形

    题意 有一个\(a \times b\)的整数组成的矩阵,现请你从中找出一个\(n \times n\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小 思路 对于每一列,都用两个单调队列维护 ...

  5. django 快速实现登陆,接着注册的项目写(五)

    1.改项目的urls.py from django.conf.urls import url,include from django.contrib import admin admin.autodi ...

  6. Spring动态切换数据源及事务

    前段时间花了几天来解决公司框架ssm上事务问题.如果不动态切换数据源话,直接使用spring的事务配置,是完全没有问题的.由于框架用于各个项目的快速搭建,少去配置各个数据源配置xml文件等.采用了动态 ...

  7. Ubuntu安装Redis及使用

    NoSQL简介NoSQL,全名为Not Only SQL,指的是非关系型的数据库随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来 优点/缺点优点:高可扩展性分布式计算低成本架构的 ...

  8. Python 文件writelines() 方法和处理双层列表

    概述 writelines() 方法用于向文件中写入一序列的字符串. 这一序列字符串可以是由迭代对象产生的,如一个字符串列表. 换行需要制定换行符 \n. 语法 writelines() 方法语法如下 ...

  9. DockerFile 简单使用

    Dockerfile 是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本. 以 CentOS 为例(https://hub.docker.com/_/centos): FROM ...

  10. Android 电量优化

    Android系统上App的电量消耗主要由cpu.wakelock.数据传输(流量和wifi).wifi运行.gps.other senior组成,而耗电异常也是由于这几个模块的使用不当. Broad ...