Thinkphp5.0 的使用模型Model的获取器与修改器
Thinkphp5.0 的使用模型Model的获取器、修改器、软删除
一、获取器
在model中使用 get+字段名+Attr,可以修改字段的返回值。
数据库中性别保存为,0未知、1男、2女,查询时返回汉字:
model:
//将性别的012修改为未知、男。女返回
public function getSexAttr($val){
switch($val){
case '1' :
return '男';
case '2':
return '女';
default:
return '未知';
}
} //格式化时间戳后返回
public function getAddtimeAttr($val){
if($val){
return date('Y-m-d H:i:s',$val);
}else{
return $val;
}
}
controller:
$res = TestUser::get(2);
dump($res->toArray());//性别会被model转化
dump($res->getData());//返回原始数据
二、模型修改器:
在model中使用 set+字段名+Attr,可以修改字段值,方便添加数据时使用。
示例,比如密码需要MD5加密:
model:
//对密码字段加密之后存储
//第一个参数是密码
//第二个参数是添加的数据,可选
public function setPasswordAttr($val,$data){
if($val === '') {
return $val;
}else{
return md5($val.$data['email']);
}
}
三、自动完成:
model:
//添加和修改时,都会自动完成的字段
protected $auto = ['addtime']; public function setAddtimeAttr(){
return time();
}
三、添加数据时,自动完成:
model:
protected $insert = ['addtime']; public function setAddtimeAttr(){
return time();
}
四、修改数据时,自动完成:
model:
protected $update = ['addtime']; public function setAddtimeAttr(){
return time();
}
五、自动完成时间戳
在数据库配置文件database.php中,有一项:
// 自动写入时间戳字段
'auto_timestamp' => false,
如果开启,则会自动完成所有表的时间戳,但是不建议这样,只在需要的地方设置更安全。
例如对用户表的时间戳自动完成,就在User的model中设置:
<?php
namespace app\index\model;
use think\Model; class User extends Model{ //开启自动完成时间戳功能
protected $autoWriteTimestamp = true;
//开启后,
//添加数据时,默认自动完成的字段是:create_time和update_time。
//修改数据时,默认自动完成的字段是:update_time。
//如果数据库不是这两个字段,则会报错
//如果不想用这两个字段,可以进行如下修改
protected $createTime = 'addtime';//修改默认的添加时间字段
protected $updateTime = 'updtime';//修改默认的修改时间字段
protected $updateTime = false;//当不需要这个字段时设置为false
}
六、软删除
软删除:当删除条记录时,有时我们需要假删除,只通过修改某个字段状态来标记记录已删除。
model:
<?php
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete;//引入软删除的类 class User extends Model{ //使用软删除
//删除时,默认更新的字段是delete_time
use SoftDelete;
//如果修改修改默认的字段名字
protected $deleteTime = 'deltime';
}
控制器:
$res = User::destroy(1);//软删除
//返回影响的行数
dump($res);
执行删除后,就会更新delete_time字段,如果update_time字段也开启了自动完成,也会更新update_time字段。
//获取所有数据,会过滤掉delete_time不为null的记录(即软删除的记录不会显示)
//注意,delete_time字段默认值要设置为null,不能设置为0,否则0页会被视为软删除过的数据
$res = $model->select(); //如果需要获取包含软删除的数据,使用withTrashed(true)。
$res = User::withTrashed(true)->select(); //如果需要获取软删除过的数据
$res = User::onlyTrashed()->select(); //删除id是15的记录,如果开启软删除,会进行假删除
$res = User::destroy(15); //如果开启了软删除,需要真正地删除数据,不做软删除
//destory()第二个参数传递true
$res = User::destroy(15,true);
//delete()参数传递true
$userData = User::get(15);
$userData->delete(true);
Thinkphp5.0 的使用模型Model的获取器与修改器的更多相关文章
- Thinkphp5.0 的使用模型Model查询
Thinkphp5.0 的使用模型Model查询 一.查询多条记录 获取多个数据可以使用:select()方法和all()方法. 示例一:使用all()方法. //(1)筛选条件使用闭包函数 $res ...
- Thinkphp5.0 的使用模型Model删除数据
Thinkphp5.0 的使用模型Model删除数据 一.使用destory()删除数据 //删除id为3的记录 $res = User::destroy(3); //返回影响的行数 dump($re ...
- Thinkphp5.0 的使用模型Model更新数据
Thinkphp5.0 的使用模型Model更新数据 (1)使用update()方法进行更新数据 一.where条件写在更新数据中 (这种情况更新的数据,必须含主键) $res = User::upd ...
- Thinkphp5.0 的使用模型Model添加数据
Thinkphp5.0 的使用模型Model添加数据 使用create()方法添加数据 $res = TestUser::create([ 'name' => 'zhao liu', 'pass ...
- thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法)
thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法) 一.总结 记得看下面 1.获取器的作用是在获取数据的字段值后自动进行处理 2.修改器的作用是可以在数据赋值的时候自动进行转换处 ...
- thinkphp5.0学习笔记(三)获取信息,变量,绑定参数
1.构造函数: 控制器类必须继承了\think\Controller类,才能使用: 方法_initialize 代码: <?php namespace app\lian\controller; ...
- php手记之05-tp5获取器与修改器
获取器 命名规范为: getFieldNameAttr 例如,我们需要对状态值进行转换,可以使用: <?php class User extends Model { public functio ...
- ThinkPHP5——模型(model)的使用
在使用ThinkPHP5的过程中,我经常使用db进行数据库操作的,后来接触到了模型(model),刚使用时感觉跟db没啥区别,后来查官网知道模型基类中还提供了较多的其他的方法可以方便使用例如获取器.修 ...
- thinkphp5.0和thinkphp3.2的区别不同之处
先看目录结构: thinkphp 5.0的目录结构, 文档:https://www.kancloud.cn/manual/thinkphp5/118008 project 应用部署目录 ├─appli ...
随机推荐
- php微信自动发红包
<?phpheader('Content-type:text');define("TOKEN", "weixin");$wechatObj = new w ...
- SpringBoot_自定义配置属性
@ConfigurationProperties 在aplication.properties 中添加如下一段配置: mysql.jdbcName=com.mysql.jdbc.Driver mysq ...
- ES6学习笔记(1)----let和const命令
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ let和const命令 let 总结1.声明变量基本使用方法与var 相同 不同点 a.在代 ...
- python中break、continue 、exit() 、pass终止循环的区别
python中break.continue .exit() .pass区分 1.break:跳出循环,不再执行 Python break语句,就像在C语言中,打破了最小封闭for或while循环. b ...
- Java加密简介
加密算法: 1.对称加密 DES AES 2.非对称加密 RSA 3.散列函数算法加密 (单项加密)::MD5.SHA.Mac 4.数字签名算法:RSA.DSA 其中,前三种主要完成数据的加解密: ...
- col - 过滤掉输入中的反向换行符
SYNOPSIS(总览) col [-bfx ] [ Fl l Ar num ] DESCRIPTION(描述) Col 过滤掉反向(以及半反向)换行符(LF: line feed or NL: ne ...
- vue小结1
(1)渐进式vue 构建用户界面的渐进式框架 只关注视图层 (2)vue中的两个核心点 响应的数据绑定:当数据发生改变时,自动更新视图 利用Object.definedProperty(该属性IE8不 ...
- -- HTML标记大全参考手册[推荐]
-- HTML标记大全参考手册[推荐]总类(所有HTML文件都有的) 文件类型 <HTML></HTML> (放在档案的开头与结尾) 文件主题 <TITLE>&l ...
- Cannot find class: com.mysql.jdbc.driver
mybatis配置mysql报错,信息如下 Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Caus ...
- 18mybatis
18mybatis-2018/08/02 1.mybatis标签 定义SQL语句 id :唯一的标识符 parameterType:传给此语句的参数的全路径名或别名例:com.test.poso.Us ...