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下使用strpos需要注意 === 运算符
Jul 17 PHP
php简单的会话类代码
Aug 08 PHP
php中http_build_query 的一个问题
Mar 25 PHP
PHPMYADMIN导入数据最大为2M的解决方法
Apr 23 PHP
浅谈php扩展imagick
Jun 02 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
Python中使用django form表单验证的方法
Jan 16 PHP
thinkPHP5.0框架开发规范简介
Mar 25 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 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
PHP实现时间轴函数代码
2011/10/08 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
python实现图片筛选程序
2018/10/24 Python
python实现复制大量文件功能
2019/08/31 Python
利用Python的turtle库绘制玫瑰教程
2019/11/23 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
法学专业自我鉴定
2014/02/05 职场文书
租车协议书范本
2014/04/22 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
win10清理dns缓存
2022/04/19 数码科技