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 ...
随机推荐
- vue cli 3 打包过大问题
vue cli 3 打包命令 npm run build,这种情况下的打包可以通过设置 vue.config.js里面的 productionSourceMap: false. 如果是自己设置的打包环 ...
- mysql 插入多条记录,重复值不插入
只去除主键与唯一索引的字段,字段为null时 是可以重复插入的domo: insert ignore into table_name(email,phone,user_id) values('test ...
- (转)淘淘商城系列——使用maven tomcat插件启动web工程
http://blog.csdn.net/yerenyuan_pku/article/details/72672138 上文我们一起学习了怎样搭建maven工程,这篇文章我就来教大家一起学习怎样用to ...
- ALTER LANGUAGE - 修改一个过程语言的定义
SYNOPSIS ALTER LANGUAGE name RENAME TO newname DESCRIPTION 描述 ALTER LANGUAGE 修改一门语言的定义. 目前唯一的功能就是重命名 ...
- shellinabox的安装使用
一.简介 Shell In A Box(发音是shellinabox)是一款基于Web的终端模仿器,由Markus Gutschke开辟而成.它有内置的Web办事器,在指定的端口上作为一个基于Web的 ...
- 使用GetLogicalDriveStrings获取卷标
#include <windows.h> #include <stdio.h> #define BUFSIZE 512 int main() { TCHAR szTemp[BU ...
- Linux Mint 教程
Linux Mint 安装文本编辑软件 sudo apt-get install gedit linux操作系统上面开发程序, 光有了gcc 是不行的它还需要一个 build-essential软 ...
- java.util.MissingResourceException: Can't find bundle for base name db, locale zh_CN
在使用Bundle来加载配置文件的时候, 爆出了这个错误: 原因? 没有找到需要加载的配置文件,因为配置文件必须放在src目录下面, 如果放进了com.bj186.crm的包下面,就必须添加包的名称到 ...
- shell learning note
shell learning note MAIN="/usr/local/" # 变量大写 STATUS="$MAIN/status" # 美元符加字符串是 ...
- ORA-28000: the account is locked-详细解决方案
运行-->cmd-->sqlplus /nolog conn system/orcl(或预设的密码) alter user scott identified by tiger(或预设密码) ...