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 相关文章推荐
将数字格式的计算结果转为汉字格式
Oct 09 PHP
一个简单的PHP验证码实现代码
May 10 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
Jul 11 PHP
PHP获取网站中各文章的第一张图片的代码示例
May 20 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
windows7配置Nginx+php+mysql的详细教程
Sep 04 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
PHP实现的杨辉三角求解算法分析
Mar 11 PHP
laravel5.6实现数值转换
Oct 23 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
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
javascript 数组操作详解
2015/01/29 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
python中while循环语句用法简单实例
2015/05/07 Python
python中字符串变二维数组的实例讲解
2018/04/03 Python
python模拟表单提交登录图书馆
2018/04/27 Python
简单了解python中对象的取反运算符
2019/07/01 Python
Pyqt5自适应布局实例
2019/12/13 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
python模拟实现分发扑克牌
2020/04/22 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
银行求职推荐信范文
2013/11/30 职场文书
学校运动会开幕演讲稿
2014/01/04 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
表彰会主持词
2014/03/26 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang
Python 发送SMTP邮件的简单教程
2021/06/24 Python
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技