Thinkphp5.0框架使用模型Model的獲取器、修改器、軟刪除數(shù)據(jù)操作示例
本文實(shí)例講述了Thinkphp5.0框架使用模型Model的獲取器、修改器、軟刪除數(shù)據(jù)操作。分享給大家供大家參考,具體如下:
一、獲取器
在model中使用 get+字段名+Attr,可以修改字段的返回值。
數(shù)據(jù)庫(kù)中性別保存為,0未知、1男、2女,查詢(xún)時(shí)返回漢字:
model:
//將性別的012修改為未知、男。女返回
public function getSexAttr($val){
switch($val){
case '1' :
return '男';
case '2':
return '女';
default:
return '未知';
}
}
//格式化時(shí)間戳后返回
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());//性別會(huì)被model轉(zhuǎn)化 dump($res->getData());//返回原始數(shù)據(jù)
二、模型修改器:
在model中使用 set+字段名+Attr,可以修改字段值,方便添加數(shù)據(jù)時(shí)使用。
示例,比如密碼需要MD5加密:
model:
//對(duì)密碼字段加密之后存儲(chǔ)
//第一個(gè)參數(shù)是密碼
//第二個(gè)參數(shù)是添加的數(shù)據(jù),可選
public function setPasswordAttr($val,$data){
if($val === '') {
return $val;
}else{
return md5($val.$data['email']);
}
}
三、自動(dòng)完成:
model:
//添加和修改時(shí),都會(huì)自動(dòng)完成的字段
protected $auto = ['addtime'];
public function setAddtimeAttr(){
return time();
}
三、添加數(shù)據(jù)時(shí),自動(dòng)完成:
model:
protected $insert = ['addtime'];
public function setAddtimeAttr(){
return time();
}
四、修改數(shù)據(jù)時(shí),自動(dòng)完成:
model:
protected $update = ['addtime'];
public function setAddtimeAttr(){
return time();
}
五、自動(dòng)完成時(shí)間戳
在數(shù)據(jù)庫(kù)配置文件database.php中,有一項(xiàng):
// 自動(dòng)寫(xiě)入時(shí)間戳字段 'auto_timestamp' => false,
如果開(kāi)啟,則會(huì)自動(dòng)完成所有表的時(shí)間戳,但是不建議這樣,只在需要的地方設(shè)置更安全。
例如對(duì)用戶(hù)表的時(shí)間戳自動(dòng)完成,就在User的model中設(shè)置:
<?php
namespace app\index\model;
use think\Model;
class User extends Model{
//開(kāi)啟自動(dòng)完成時(shí)間戳功能
protected $autoWriteTimestamp = true;
//開(kāi)啟后,
//添加數(shù)據(jù)時(shí),默認(rèn)自動(dòng)完成的字段是:create_time和update_time。
//修改數(shù)據(jù)時(shí),默認(rèn)自動(dòng)完成的字段是:update_time。
//如果數(shù)據(jù)庫(kù)不是這兩個(gè)字段,則會(huì)報(bào)錯(cuò)
//如果不想用這兩個(gè)字段,可以進(jìn)行如下修改
protected $createTime = 'addtime';//修改默認(rèn)的添加時(shí)間字段
protected $updateTime = 'updtime';//修改默認(rèn)的修改時(shí)間字段
protected $updateTime = false;//當(dāng)不需要這個(gè)字段時(shí)設(shè)置為false
}
六、軟刪除
軟刪除:當(dāng)刪除條記錄時(shí),有時(shí)我們需要假刪除,只通過(guò)修改某個(gè)字段狀態(tài)來(lái)標(biāo)記記錄已刪除。
model:
<?php
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete;//引入軟刪除的類(lèi)
class User extends Model{
//使用軟刪除
//刪除時(shí),默認(rèn)更新的字段是delete_time
use SoftDelete;
//如果修改修改默認(rèn)的字段名字
protected $deleteTime = 'deltime';
}
控制器:
$res = User::destroy(1);//軟刪除 //返回影響的行數(shù) dump($res);
執(zhí)行刪除后,就會(huì)更新delete_time字段,如果update_time字段也開(kāi)啟了自動(dòng)完成,也會(huì)更新update_time字段。
//獲取所有數(shù)據(jù),會(huì)過(guò)濾掉delete_time不為null的記錄(即軟刪除的記錄不會(huì)顯示) //注意,delete_time字段默認(rèn)值要設(shè)置為null,不能設(shè)置為0,否則0頁(yè)會(huì)被視為軟刪除過(guò)的數(shù)據(jù) $res = $model->select(); //如果需要獲取包含軟刪除的數(shù)據(jù),使用withTrashed(true)。 $res = User::withTrashed(true)->select(); //如果需要獲取軟刪除過(guò)的數(shù)據(jù) $res = User::onlyTrashed()->select(); //刪除id是15的記錄,如果開(kāi)啟軟刪除,會(huì)進(jìn)行假刪除 $res = User::destroy(15); //如果開(kāi)啟了軟刪除,需要真正地刪除數(shù)據(jù),不做軟刪除 //destory()第二個(gè)參數(shù)傳遞true $res = User::destroy(15,true); //delete()參數(shù)傳遞true $userData = User::get(15); $userData->delete(true);
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《ThinkPHP入門(mén)教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門(mén)教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門(mén)教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
讓ThinkPHP支持大小寫(xiě)url地址訪(fǎng)問(wèn)的方法
這篇文章主要介紹了讓ThinkPHP支持大小寫(xiě)url地址訪(fǎng)問(wèn)的方法,是Windows環(huán)境下開(kāi)發(fā)ThinkPHP程序非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10
php文字水印和php圖片水印實(shí)現(xiàn)代碼(二種加水印方法)
有時(shí)上傳圖片時(shí)需要給網(wǎng)站加上水印,水印可以分為文字水印和圖片水印,下面就實(shí)現(xiàn)這二種水印2013-12-12
laravel實(shí)現(xiàn)上傳圖片的兩種方式小結(jié)
今天小編就為大家分享一篇laravel實(shí)現(xiàn)上傳圖片的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
php根據(jù)身份證號(hào)碼計(jì)算年齡的實(shí)例代碼
我們只要知道身份證的生成規(guī)則就可以了,像下面我們從指定位置到多少位就是出日期了,然后我們把日期轉(zhuǎn)成時(shí)間戳然后進(jìn)行加減運(yùn)算就得出了年齡了,下面我們看實(shí)例2014-01-01
Thinkphp5+plupload實(shí)現(xiàn)的圖片上傳功能示例【支持實(shí)時(shí)預(yù)覽】
這篇文章主要介紹了Thinkphp5+plupload實(shí)現(xiàn)的圖片上傳功能,結(jié)合具體實(shí)例形式分析了thinkPHP5結(jié)合plupload實(shí)現(xiàn)可支持實(shí)時(shí)預(yù)覽的圖片上傳功能相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
php版微信公眾平臺(tái)實(shí)現(xiàn)預(yù)約提交后發(fā)送email的方法
這篇文章主要介紹了php版微信公眾平臺(tái)實(shí)現(xiàn)預(yù)約提交后發(fā)送email的方法,結(jié)合實(shí)例形式分析了php微信公眾平臺(tái)郵件發(fā)送的相關(guān)操作技巧,需要的朋友可以參考下2016-09-09
thinkphp實(shí)現(xiàn)多語(yǔ)言功能(語(yǔ)言包)
這篇文章主要介紹了thinkphp實(shí)現(xiàn)多語(yǔ)言功能(語(yǔ)言包),需要的朋友可以參考下2014-03-03

