ThinkPHP5入门(三)----模型篇
一、操作数据库
1、数据库连接配置
数据库默认的相关配置在项目的application\database.php
中已经定义好。 只需要在模块的数据库配置文件中配置好当前模块需要连接的数据库的配置参数即可。
模块的数据库配置文件的路径为:
application/index/database.php
配置参数 如:数据库名称和端口号
return [
// 数据库名
'database' => 'test',
// 端口
'hostport' => 3306
];
2、查看数据库配置详情
打印config('database')
即可查看所有配置
3、连接数据库
$res = Db::connect();
注意:
- 需要在文件头引入
Db
类。引入方式为:use think\Db;
- TP5是憜性加载,即此时虽然已经可以查看到连接数据库的参数信息,但即使配置参数有问题(如数据库不存在)时不会有错误提示。
4、查询数据
(1)运行原生SQL语句(query()查询)
1)支持参数绑定
Db::query('select * from think_user where id=?',[8]);
2)支持命名占位符绑定
Db::query('select * from think_user where id=:id',['id'=>8]);
3)支持多个数据库连接
Db::connect($config)->query('select * from think_user where id=:id',['id'=>8]);
(2)查询构造器
1)查询一条数据(结果不存在时,返回null)
Db::table('think_user')->where('status',1)->find();
【定义了数据表前缀】
Db::name('user')->where('status',1)->find();
【助手函数:默认每次都会重新连接数据库】
db('user')->where('status',1)->find();
【助手函数:使用第三个参数进行单例化,使得每次使用不再重新连接数据库】
db('user',[],false)->where('status',1)->find();
【使用查询对象进行查询】
$query = new \think\db\Query();
$query->table('think_user')->where('status',1);
Db::find($query);
【直接使用闭包函数】
Db::find(function($query){
$query->table('think_user')->where('status',1);
});
2)查询多条数据(结果不存在时,返回空数组)
Db::table('think_user')->where('status',1)->select();
【定义了数据表前缀】
Db::name('user')->where('status',1)->select();
【助手函数:默认每次都会重新连接数据库】
db('user')->where('status',1)->select();
【助手函数:使用第三个参数进行单例化,使得每次使用不再重新连接数据库】
db('user',[],false)->where('status',1)->select();
【使用查询对象进行查询】
$query = new \think\db\Query();
$query->table('think_user')->where('status',1);
Db::select($query);
【直接使用闭包函数】
Db::select(function($query){
$query->table('think_user')->where('status',1);
});
3)查询某个字段的值
Db::table('think_user')->where('id',1)->value('name');
4)查询某一列的值
Db::table('think_user')->where('status',1)->column('name');
5)查询多列的值
Db::table('think_user')->where('status',1)->field('id,name')->select(); //查询id和name两列的所有记录
6)数据集分批处理
7)JSON类型数据查询
5、添加数据
(1)添加一条数据insert()
----添加成功返回1
$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);
(2)添加多条数据insertAll()
----添加成功返回添加成功的记录条数
$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);
(3)助手函数
// 添加单条数据
db('user')->insert($data); // 添加多条数据
db('user')->insertAll($list);
(4)快捷更新(V5.0.5+)
Db::table('data')
->data(['name'=>'tp','score'=>1000])
->insert();
ThinkPHP5入门(三)----模型篇的更多相关文章
- ThinkPHP5入门(基础篇)
ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,自2006年诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,尤其注重开发体验和易用性,并且拥有众多的 ...
- Qt入门之基础篇(三):掌握Qt4的静态编译基本方法
转载载请注明出处:CN_Simo. 导语: 前两章都提到过“静态编译”(Static Compilation),在Windows下一次静态编译差不多需要长达三个小时才能完成,而且还非常容易由于各种原因 ...
- Spring Cloud 入门 之 Feign 篇(三)
原文地址:Spring Cloud 入门 之 Feign 篇(三) 博客地址:http://www.extlight.com 一.前言 在上一篇文章<Spring Cloud 入门 之 Ribb ...
- ElasticSearch入门 第四篇:使用C#添加和更新文档
这是ElasticSearch 2.4 版本系列的第四篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- Entity Framework 6.0 入门系列 第一篇
Entity Framework 6.0 入门系列 第一篇 好几年前接触过一些ef感觉不是很好用,废弃.但是 Entity Framework 6.0是经过几个版本优化过的产物,性能和功能不断完善,开 ...
- IM开发者的零基础通信技术入门(三):国人通信方式的百年变迁
[来源申明]本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:<中国通信的百年沉浮>,本文引用时已征得原作者同意.为了更好的内容呈现,即时通讯网在收录时内容有 ...
- 【转帖】H5 手机 App 开发入门:概念篇
H5 手机 App 开发入门:概念篇 http://www.ruanyifeng.com/blog/2019/12/hybrid-app-concepts.html 作者: 阮一峰 日期: 2019年 ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- Python 正则表达式入门(初级篇)
Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...
- 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战
前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...
随机推荐
- 阿里巴巴的数据池DRUID
使用了阿里巴巴的数据池管理: 监控DB池连接和SQL的执行情况 https://github.com/alibaba/druid/wiki/常见问题 https://www.cnblogs.com ...
- Redis 的 Lua 脚本支持
Redis 2.6.0 内置的Lua Script支持,可以在Redis的Server端一次运行大量逻辑. 整个Script默认是在一个事务里的. Script里涉及的所有Key尽量用变量,从外面传入 ...
- HDU 2041--超级楼梯(递推求解)
Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input 输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每 ...
- unity3d之简单的时钟倒计时demo
输入结束时间,开始倒计时,时间差不超过一天,附上代码:(关于个位数显示,加个判断如果小于10 显示的字符串加上0) using System.Collections; using System.Col ...
- textarea的maxlength属性兼容解决方案
IE10版本的textarea才支持maxlength属性:低版本的IE都不兼容,实际上低版本的IE的市场存在率还是很高的: 所以还是很有必要来整合一套解决方案的: Jquery版本 $(functi ...
- Windows 环境下 NodeJs 开发 Log
安装 NodeJs, npm. 环境变量配置. 1, Grunt 安装 : npm install -g grunt-clinpm install -g grunt package.json { & ...
- BZOJ2229: [Zjoi2011]最小割(最小割树)
传送门 最小割树 算法 初始时把所有点放在一个集合 从中任选两个点出来跑原图中的最小割 然后按照 \(s\) 集合与 \(t\) 集合的归属把当前集合划分成两个集合,递归处理 这样一共跑了 \(n − ...
- CSS使用小技巧
对于元素position 属性中的 relative absolute 页面居中问题 /* relative */div{ position:relative; margin: 0 auto}/* ...
- 转 : Apache启动报错:could not bind to address [::]:443 解决办法
转:Apache启动报错:could not bind to address [::]:443 解决办法 安装Apache服务器的时候,报如下错误: Installing the 'apache' s ...
- HTTP状态码和HTTP请求头
HTTP报文是在Web服务器和浏览器之间进行交换的文本数据,一种是从浏览器发出的请求,一种是服务器发出的响应. 请求报文的第一行包括:1.请求方法 2.当前使用的HTTP协议版本 3.请求地址 GET ...