ThinkPHP

数据库操作

数据库连接

#在config/database.php设置数据库连接参数或者利用Db::connect()方法设置数据库连接

/*
* public static function connect($config = [], $name = false)
* 数据库初始化,并取得数据库类实例
* $config:数据库配置信息数组,可以在该方法里面进行配置
*/
#
var_dump(Db::connect());

数据库查找

query:直接操作sql语句

/*
* mixed query(string $sql, array $bind = [], boolean $master = false, bool $pdo = false)
* 描述:SQL查询语句,然后array类型
* $sql:SQL语句字符串
* $bind:SQL语句中绑定的字符串
*/
$res = Db::query('select * from book where id=?', [1001]);

常用查询语句

# select 返回所有记录,返回的结果是一个二维数组
# 如果结果不存在,返回一个空数组'[]'
$res = Db::table('book') ->where([
'id' => '1001'
])->select(); $res = db('book') ->where([
'id' => '1001'
])->select(); #功能同上 # find 返回一条记录,返回的结果是一个一维数组
# 如果结果不存在,返回null
$res = Db::table('book') ->where([
'id' => '1002'
])->find(); $res = db('book') ->where([
'id' => '1001'
])->find(); #功能同上 # value 返回一条记录,并且是这条记录的某个字段值
# 如果结果不存在,返回null
$res = Db::table('book') ->where([
'id' => '1001'
])->value('name'); $res = db('book') ->where([
'id' => '1001'
])->value('name'); #功能同上 # column 返回一个一纬数组,数组中的value值就是我们要获取列的值
# 如果结果不存在,返回空数组'[]'
$res = Db::table('book') -> where([
'id' => '1001'
]) -> column('name'); $res = db('book') ->where([
'id' => '1001'
])->column('name'); #功能同上

数据库添加
execute:直接操作sql语句

/*
* integer execute(string $sql, array $bind = [], boolean $fetch = false, boolean $getLastInsID = false, string $sequence = null)
* 描述:SQL更新语句
* $sql:SQL语句字符串
* $bind:SQL语句中绑定的字符串
*/
$res = Db::execute('select * from book where id=?', [1002]);

常用插入语句

public function insert()
{
//指定数据库表,获取表资源
$db = Db::name('book'); # $db ->insert():插入单条记录,返回是影响记录的行数
# $db ->insertGetId():插入单条记录,返回的是插入记录的id
# $db ->insertAll():批量插入 //inset 返回值是影响记录的行数,插入数
$res = $db ->insert([
'id' => '1005',
'name' => '书籍5',
'type_id' => '1',
'author' => '赵六',
'press' => '牛津大学出版社'
]); dump($res);
}

数据库更新

public function update()
{
//指定数据库表
$db = Db::name('book'); # $db->update()
# 更新记录某一个或几个字段,返回值为影响记录的行数
$res = $db ->where([
'id' => 1001
])->update([
'author' => '比克'
]); # $db->setField()
# 更新记录下某一个字段的值,返回值为影响记录的行数
$res = $db ->where([
'id' => 1001
])->setField('name', '书籍111'); # $db->setInc()
# 更新记录下某一个字段按固定步长增长,返回值为影响记录的行数
$res = $db ->where([
'id' => 1001
]) ->setInc('type_id', '2'); # $db->setDec()
# 更新记录下某一个字段按固定步长减小,返回值为影响记录的行数
$res = $db ->where([
'id' => 1001
]) ->setDec('type_id', '2'); dump($res);
}

数据库删除

public function delete()
{
//指定数据库表
$db = Db::name('book'); #返回值为影响记录的行数
$res = $db->where([
'id' => 1001
])->delete(); #如果where条件中是主键,则可以写为:
$res = $db->delete('1002'); dump($res);
}

链式操作

$res3 = Db::table('book')
-> where('id', '>', '1004') #查询条件where($field, $op, $condition)
-> field('name, press') #过滤条件field
-> order('id DESC') #排序方式order,DESC降序,ASC升序
# -> limit(3, 5) #记录条数限制limit
# -> page(2,5) #分页功能page
-> group('press') #分组group
-> select();

模型

获取model对象

public function requireModel()
{
#方式1:使用助手函数获取model实例对象
$book = model('Book');
$book1 = $book::get('1001'); #方式2:使用Loader获取model实例对象
$book = Loader::model('Book');
$book2 = $book::get('1001'); #方式3:使用new方法获取实例对象
$book = new Book();
$book3 = $book::get('1001'); #方式4:静态方法直接获取实例对象(推荐使用)
$book4 = Book::get(1001); dump($book1->toArray());
dump($book2->toArray());
dump($book3->toArray());
dump($book4->toArray());
}

模型查询数据

public function getBook($bookId)
{
#get进行查找单条记录
$book = Book::get($bookId); #方法1
$book = Book::get(function ($query){ #方法2
$query->where('id', '>', 1001)
->field('name');
});
$name = $book->name; #调用模型的属性
$res = $book->toArray(); #将模型转换为数组 #get获取批量记录
$books = Book::all();
$book = Book::all(function ($query){ #方法2
$query->where('id', '>', 1001)
->field('name');
});
foreach ($books as $value)
{
#遍历循环打印
#dump($value->toArray());
} #和Db相似的链式方法:find()方法查找单条记录
$res = Book::where('id', '=', '1001')
->field('name, author')
->find();
#dump($res->toArray()); #select()方法查找多条记录
$res = Book::where('id', '>', '1001')
->field('name, author')
->select();
foreach ($res as $value)
{
#遍历循环打印
#dump($value->toArray());
} #value():获取单条记录某个字段的值
$res = Book::value('press'); #column():所有多条记录某个字段的值
$res = Book::column('press', 'press');
dump($res);
}

模型添加数据

public function insertBook($bookId)
{
#方式1:Book::create插入单条数据
$book = Book::create([
'id' => $bookId,
'name' => '书籍21',
'type_id' => 1,
'author' => "作者{$bookId}",
'press' => '清华大学出版社'
]); #方式2:save()插入单条数据
$book = new Book();
$book->id = 1000 + (integer)($bookId);
$book->name = "书籍{$bookId}";
$book->type_id = 1;
$book->author = "作者{$bookId}";
$book->press = '清华大学出版社';
$book->save(); $book1 = new Book(); #插入快捷方式
$book1->save([
'id' => 1000 + (integer)($bookId),
'name' => "书籍{$bookId}",
'type_id' => 1,
'author' => "作者{$bookId}",
'press' => '清华大学出版社'
]); #方式3:saveAll()插入批量数据
$res = $book1 ->saveAll([
[
'name' => "书籍{$bookId}",
],
[
'name' => "书籍{$bookId}",
]
]); dump($res);
}

模型更新数据

public function updateBook()
{
//更新数据
$res = Book::update([
'author' => '作者11'
], function ($query){
$query->where('id', '=', '1001');
}); #更新数据
$res = Book::where('id', '=', '1002')
->update([
'author' => '作者22'
]); #通过save()来更新已经有的model
$book = Book::get(1001);
$book ->author = '作者1';
$book ->save(); dump($book->toArray());
}

模型删除数据

public function deleteBook()
{
#Book::destroy() #如果当前表存在主键,直接传值
#$res = Book::destroy(1001); #如果当前表不存在主键,则可以根据$query函数进行条件删除
#$res = Book::destroy(function ($query){
# $query->where('id', '=', '1002');
#}); #通过实例进行删除
#$book = Book::get(1003);
#$res = $book ->delete(); #通过where条件进行删除
$res = Book::where('id', '>', 1000)
->delete(); dump($res); }

模型聚合操作

class Book extends Model
{
#属性和数据库表字段映射
protected $createTime = 'create_time';
protected $updateTime = 'update_time'; #获取器:读取数据库中值的时候,在值的基础上进行修改
public function getSexAttr($var)
{
switch ($var) {
case 0:
return '男';
break;
case 1:
return '女';
break;
default:
return '未知';
break;
}
} #修改器:对写入数据库中值进行修改
public function setPasswordAttr($var)
{
return md5($var);
} #自动完成功能
protected $auto = [ #数据插入或更新的时候,对字段进行更新 ]; protected $insert = [ #插入时候,对字段进行更新
'create_time'
]; protected $update = [ #更新时候,对字段进行更新
'modify_time'
]; #绑定数据库中create_time字段
public function setCreateTimeAttr($var)
{
return time();
} #绑定数据库中modify_time字段
public function setModifyTimeAttr($var)
{
return time();
}
}

TP5学习记录(Model篇)的更多相关文章

  1. Elasticsearch学习记录(入门篇)

    Elasticsearch学习记录(入门篇) 1. Elasticsearch的请求与结果 请求结构 curl -X<VERB> '<PROTOCOL>://<HOST& ...

  2. Vue学习记录第一篇——Vue入门基础

    前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...

  3. 我的MySQL学习记录 完结篇DAY05~

    课程已全部学完,Redis\mongoDB 的学习也会提上日程啦~剩下的最大的最大的问题在于练习,大量的练习,后期会发我的学习记录. 小记:也不知道是不是加强针的缘故,老是拉肚子,记录彻底感冒的一天, ...

  4. PHP学习记录第一篇:Ubuntu14.04下LAMP环境的搭建

    最近一段时间会学习一下PHP全栈开发,将会写一系列的文章来总结学习的过程,以自勉. 第一篇记录一下LAMP环境的安装 0. 安装Apache Web服务器 安装之前先更新一下系统 sudo apt-g ...

  5. Git学习记录-基本命令篇

    目录 网页在线练习地址 https://learngitbranching.js.org/ 1.git commit Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然 ...

  6. cocos2d-x学习记录第一篇-环境变量配置

    最近准备学习cocos2d-x,之前一直是做iOS开发的,算是零基础开始学习吧. (此条后来修改,不用配置下面这些东西,下载一个cocosstudio就可以了,直接在里边就创建工程了) 本人用Mac电 ...

  7. Backbone学习笔记 - Model篇

    2 Model 在Backbone中,Model用于存储核心数据,可以将数据交互相关的逻辑代码放在这里.基本形式如下: var Human = Backbone.Model.extend({ init ...

  8. zookeeper学习记录第二篇-----安装、配置、启动

    搭建zk集群,起码保证3台虚拟机的配置,本人使用的虚拟机环境为wm14+centos7+jdk1.8 下载地址 zk的tar包下载地址:http://mirror.bit.edu.cn/apache/ ...

  9. 学习记录特别篇之sql,类的继承

    思路: 应用场景: 1.将父类当做一个基础类 大家都去继承该方法,以便少些代码 2.继承父类的方法 同时可以重写该方法时候调用父类原先的方法 实现一石二鸟的效果 即 既增加原先的功能 又新增新的功能 ...

随机推荐

  1. Flask:基本结构

    在大多数标准中,Flask 都算是小型框架,小到可以称为"微框架".但是,小并不意味着它比其他框架的功能少.Flask 自开发伊始就被设计为可扩展的框架,它具有一个包含基本服务的强 ...

  2. 25个关键技术点,带你熟悉Python

    摘要:本文收纳了Python学习者经常使用的库和包,并介绍了Python使用中热门的问题. 01.Python 简介 什么是 Python 一种面向对象的高级动态可解释型脚本语言. Python 解释 ...

  3. C语言经典88案例,我文科妹妹说她都学会了!

    案例ex01: 将字符串转换为一个整数 1 题目 函数:fun() 功能:将字符串转换为一个整数 描述: [不能使用C语言提供的字符串函数] 输入:字符串"-1234" 输出:整型 ...

  4. python3中post和get请求处理

    post 请求处理 def url(): url = "www.xxx.com.cn" data = { "csrfmiddlewaretoken":" ...

  5. 从零学脚手架(四)---babel

    如果此篇对您有所帮助,在此求一个star.项目地址: OrcasTeam/my-cli 接下来介绍一个打包编译过程中一个极为重要的工具--babel. ES6的枷锁 细心的朋友可以知道,在之前打包编译 ...

  6. PHP配置 2. 日志相关配置

    例如,在disable_functions,定义禁用phpinfo函数, # vim /usr/local/php/etc/php.ini disable_functions=phpinfo,eval ...

  7. 如何在 ASP.Net Core 中实现 健康检查

    健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态. ASP.Net Core 中的 健康检查 ...

  8. SpringMVC请求映射handler源码解读

    请求映射源码 首先看一张请求完整流转图(这里感谢博客园上这位大神的图,博客地址我忘记了): 前台发送给后台的访问请求是如何找到对应的控制器映射并执行后续的后台操作呢,其核心为DispatcherSer ...

  9. 走进docker-聊聊docker网络

    容器网络概念 首先了解下linux的网络构成概念 命名空间: Linux在网络栈中引入网络命名空间,将独立的网络协议栈隔离到不同的命令空间中,彼此间无法通信:Docker利用这一特性,实现不容器间的网 ...

  10. 一文教你搞懂 Go 中栈操作

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/513 本文使用的go的源码15.7 知识点 LInux 进程在内存布 ...