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进行实现,而通信时服务端你只需选其一就行了.同 ...
随机推荐
- java 简单计算器
package com.direct.demo; import java.text.DecimalFormat; import java.util.Scanner; public class Calc ...
- Spring cloud Zuul网关异常处理
Spring cloud Zuul网关异常处理 一 异常测试: 1> 创建一个pre类型的过滤器,并在该过滤器的run方法实现中抛出一个异常.比如下面的实现,在run方法中调用的doSometh ...
- TopCoder14580: EllysRPS
题意 \(yyb\)要去与\(m\)\((m\le100)\)个人玩游戏 由于\(yyb\)忙着切大火题,他没有太多的精力浪费在游戏上 所以仁慈的\(yyb\)决定放\(m\)个人一条生路,不吊打他们 ...
- 使用postMessage通信,未触发message事件
前提: 父子页面跨域通信,使用postMessage技术 a页面为父页面,b页面为子页面 a中包含多个iframe,部分域名是相同的,目录层级不一致,地址使用变量根据触发的条件不同拼接地址 部分代码( ...
- String class fetch functionality
String类的获取功能: package com.itheima_04; /* * String类的获取功能: * int length():获取字符串的长度,其实也就是字符个数 * char ch ...
- ESP8266调试记录
1.引脚图:使用STM32F103ZET6芯片的串口1 PA9-TX //PA10-RX(该串口挂载到APB2总线时钟)然后分别连接模块的RX和TX,供电使用3.3v(供电一定要稳)但不能超过5v ...
- 一些baidu面经
百度问的一些问题供参考: 1. epoll 和 select,epoll 两种模式,阻塞非阻塞: 2. 两个严格递增链表找出相同的元素组成新的链表: ref1 ref 3. 网络传输中如何传送一个 ...
- linux下pgAdmin4安装
首先到pgAdmin4官方网站下载安装包:https://www.pgadmin.org/download/ 我下载的是3.0; 到文件所在目录执行安装命令: sudo pip install ./p ...
- layui实现checkbox的目录树tree
layui.use([ 'tree' ], function() {$ = layui.jquery;form = layui.form;//获取节点数据getTreeData();}); funct ...
- 打通版微社区(2):服务器部署MySql数据库 For DZ3.2
写在前面:单独写部署MySql原因是,我这边的应用数据库都是独立存在的,数据与应用分别部署在不同的服务器.另外我也没有实际部署MySql的经验,特意写一篇日志,张记性.安装MySql参考了http:/ ...