TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】


Posted in PHP onApril 05, 2020

本文实例讲述了TP5框架model常见操作。分享给大家供大家参考,具体如下:

  • 使用model 查询数据,添加数据,修改数据,删除数据
  • 聚合操作
  • 获取器,修改器
  • 自动添加时间戳(创建时间,修改时间)
  • 软删除

1、使用model查询数据

$res = User::get(1); //获取主键为1的数据,得到的是一个对象
 
$res = $res->toArray(); //将对象转化为数组
 
dump($res->name); //获取 $res 里 name 字段的值
//使用闭包函数查询 id=1 的记录
$res = User::get(function($query){
  $query->where("id","eq",1)
     ->field('name')
});
$res = User::where("id",10)->value('name');
$res = User::where("id",10)->field('name')->find();
 
$res = User::column('email');        //查询所有的 email 字段值    
$res = User::where("id",">",5)->select();  //查询所有id大于5的记录
$res = User::all('1,2'); //查询主键等于 1 或2 的记录
foreach($res as $val)  //转化为数组
{
  dump($val->toArray());
}
//使用闭包函数查询 id<5 的记录
$res = User::get(function($query){
  $query->where("id","<",5)
     ->field('name')
});

2、使用model添加数据

$res = User::create([
  'name' => 'yulong',
  'pwd' => '123'
],true);         //第二个参数为true时,只添加数据表中已有的字段,不报错,不写则默认为false;;;true 也可以换成一个数组,数组里存放数据表中的字段,表示仅允许数组中的字段添加数据
$res->id; //本次添加的自增id
dump($res);
$usermodel = new User;
$res = $usermodel
  ->allowField(true) //仅允许添加数据表中存在的字段,也可以写成数组
  ->save([
    'name' => 'yulong',
    'pwd' => '123'
  ]);
 
dump($res->id); //获取新添加数据的自增id
$usermodel = new User;
$res = $usermodel->saveAll([  //一次保存多条数据
  'name' => 'yulong001',
  'name' => 'yulong002'
]);
 
dump($ers);

3、使用model更新数据

$res = User::update([
  'name' => 'yulong002'
],['id'=>1]);        //更新 id=1 的记录
 
 $res = User::update([
  'name' => 'yulong002'
],function(){
  $query->where("id","LT",5);  //使用闭包函数更新 id<5 的记录
}); 
 
 
dump($res);
$res = User::where("id","<",6)   //返回值是被更新数据的行数
    ->update([
       'name' => 'hahahaha'
      ]);

4、使用model删除数据

$res = User::destriy(1);  //删除主键为1的记录,返回影响数据的行数,也可以传递数组
 
 
$usermodel = User::get(1);
$res    = $usermodel->delete();
 
 
$res = User::where("id",5)->delete(); // where() 里面有三个参数, 字段值,条件,数值
 
dump($res);

5、使用model聚合操作

$res = User::where("id",">",5)->count(); //查询id大于5的记录条数
 
// max 可以换成其他的 如 min / sum / avg
$res = User::max('num');         //查询 num 字段中的最大值
$res = User::where("id","<",5)->max('num'); //id<5 的记录中的 num 最大值

6、使用模型获取器

//model 
//方法名: get字段名Attr
//controller中获取原始数据使用 $res->getData()
 
public function getSexSttr($val){
  switch($val){
    case '1':
      return "男";
      break;
    case '2';
      return '女';
      break;
    default:
      return '未知';
      break;
  }
}

7、使用模型修改器

//model 修改器命名 set字段名Attr
//修改器作用:在往数据库添加字段时,控制器中写未处理的数据,在模型中的修改器中写处理数据的方法,这样添加到数据库中的数据就是处理过得数据了
public function setPwdAttr($val){
  return md5($val);
}
 
// $val代表 pwd 字段,$data代表接收到的所有数据 ,返回的值就是 pwd+email 
public function setPwdAttr($val,$data){
  return $val.$data['email'];
}

8、自动往数据库中添加时间戳

//自动往 time 字段中加入时间戳
public function setTimeAttr(){
  return time();
}
 
//在数据添加时发生改变
protected $insert = [ 'time_insert' ]; //设置字段
public function setTimeInsertAttr(){  //将字段值设置为当前时间
  return time();
}
 
//在更新数据时发生改变
protected $update = [ 'time_update' ]; //设置字段
public function setTimeUpdateAttr(){  //将字段值设置为当前时间
  return time();
}

9、model时间戳

// 数据库中的字段 create_time update_time
// database.php 中更改配置 'auto_timeStamp' => true
// 不推荐使用此方法,因为如果你的数据库表中没有 对应的字段 ,程序可能就会报错
// 可以单独在 某个模型中 添加属性 
 
protected $autoWriteTimeStamp = true; //开启自动加入时间戳
 
protected $createTime = 'create_at';  //设置 创建的时候写入 的字段 ,值可以为false,关闭操作
protedted $updateTime = 'update_at';  //设置 创建和更新的时候写入 的字段 ,值可以为false,关闭操作

10、软删除

// model
// 数据表中的字段 delete_time,默认值可以为 null
 
use traits\model\SoftDelete; //使用软删除的类
 
class User extends Model
{
  use SoftDelete;      //在类的开头 use SoftDelete; 
  protected $deleteTime = 'delete_at';  //设置软删除的字段,默认为 delete_time
}
 
 
$res = User::destroy(3,true); //删除主键为3的记录,第二个参数为 true 时,不是软删除,是tm真删了
 
$ress = User::get(4);
$res = $ress->delete(true); // delete() 没值时,为软删除;值为true,tm的真删
 
// controller 获取到 软删除 的记录
$res = User::withTrashed(true)->find(1); //得到id为1 的经过软删除 删除的记录
dump($res->getData()); //获取原始数据
 
$res = User::onlyTrashed()->select(); //获取所有软删除的数据

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
php 全局变量范围分析
Aug 07 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
smarty表格换行实例
Dec 15 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 PHP
php提取微信账单的有效信息
Oct 01 PHP
php字符串函数 str类常见用法示例
May 15 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
Jul 13 PHP
TP5框架实现签到功能的方法分析
Apr 05 #PHP
TP5框架页面跳转样式操作示例
Apr 05 #PHP
TP5框架实现的数据库备份功能示例
Apr 05 #PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 #PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 #PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 #PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 #PHP
You might like
实用函数8
2007/11/08 PHP
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
浅析php学习的路线图
2013/07/10 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
php5与php7的区别点总结
2019/10/11 PHP
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
js图片预加载示例
2014/04/30 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
python检测远程端口是否打开的方法
2015/03/14 Python
Python通过select实现异步IO的方法
2015/06/04 Python
RC4文件加密的python实现方法
2015/06/30 Python
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
python程序控制NAO机器人行走
2019/04/29 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
strlen的几种不同实现方法
2013/05/31 面试题
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
2015年话务员工作总结
2015/04/29 职场文书
话题作文之学会尊重
2019/12/16 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python
Java中API的使用方法详情
2022/04/06 Java/Android