佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Thinkphp5.0框架使用模型Model的獲取器、修改器、軟刪除數(shù)據(jù)操作示例

Thinkphp5.0框架使用模型Model的獲取器、修改器、軟刪除數(shù)據(jù)操作示例

熱門標(biāo)簽:阿里云 科大訊飛語音識別系統(tǒng) 服務(wù)器配置 電子圍欄 Linux服務(wù)器 Mysql連接數(shù)設(shè)置 銀行業(yè)務(wù) 團購網(wǎng)站

本文實例講述了Thinkphp5.0框架使用模型Model的獲取器、修改器、軟刪除數(shù)據(jù)操作。分享給大家供大家參考,具體如下:

一、獲取器

在model中使用 get+字段名+Attr,可以修改字段的返回值。

數(shù)據(jù)庫中性別保存為,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轉(zhuǎn)化
dump($res->getData());//返回原始數(shù)據(jù)

二、模型修改器:

在model中使用 set+字段名+Attr,可以修改字段值,方便添加數(shù)據(jù)時使用。

示例,比如密碼需要MD5加密:

model:

//對密碼字段加密之后存儲
//第一個參數(shù)是密碼
//第二個參數(shù)是添加的數(shù)據(jù),可選
public function setPasswordAttr($val,$data){
    if($val === '') {
      return $val;
    }else{
      return md5($val.$data['email']);
    }
}

三、自動完成:

model:

//添加和修改時,都會自動完成的字段
protected $auto = ['addtime'];
public function setAddtimeAttr(){
    return time();
}

三、添加數(shù)據(jù)時,自動完成:

model:

protected $insert = ['addtime'];
public function setAddtimeAttr(){
    return time();
}

四、修改數(shù)據(jù)時,自動完成:

model:

protected $update = ['addtime'];
public function setAddtimeAttr(){
    return time();
}

五、自動完成時間戳

在數(shù)據(jù)庫配置文件database.php中,有一項:

// 自動寫入時間戳字段
'auto_timestamp' => false,

如果開啟,則會自動完成所有表的時間戳,但是不建議這樣,只在需要的地方設(shè)置更安全。

例如對用戶表的時間戳自動完成,就在User的model中設(shè)置:

?php
namespace app\index\model;
use think\Model;
class User extends Model{
  //開啟自動完成時間戳功能
  protected $autoWriteTimestamp = true;
  //開啟后,
  //添加數(shù)據(jù)時,默認(rèn)自動完成的字段是:create_time和update_time。
  //修改數(shù)據(jù)時,默認(rèn)自動完成的字段是:update_time。
  //如果數(shù)據(jù)庫不是這兩個字段,則會報錯
  //如果不想用這兩個字段,可以進行如下修改
  protected $createTime = 'addtime';//修改默認(rèn)的添加時間字段
  protected $updateTime = 'updtime';//修改默認(rèn)的修改時間字段
   protected $updateTime = false;//當(dāng)不需要這個字段時設(shè)置為false
}

六、軟刪除

軟刪除:當(dāng)刪除條記錄時,有時我們需要假刪除,只通過修改某個字段狀態(tài)來標(biāo)記記錄已刪除。

model:

?php
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete;//引入軟刪除的類
class User extends Model{
  //使用軟刪除
  //刪除時,默認(rèn)更新的字段是delete_time
  use SoftDelete;
  //如果修改修改默認(rèn)的字段名字
  protected $deleteTime = 'deltime';
}

控制器:

$res = User::destroy(1);//軟刪除
//返回影響的行數(shù)
dump($res);

執(zhí)行刪除后,就會更新delete_time字段,如果update_time字段也開啟了自動完成,也會更新update_time字段。

//獲取所有數(shù)據(jù),會過濾掉delete_time不為null的記錄(即軟刪除的記錄不會顯示)
//注意,delete_time字段默認(rèn)值要設(shè)置為null,不能設(shè)置為0,否則0頁會被視為軟刪除過的數(shù)據(jù)
$res = $model->select();
//如果需要獲取包含軟刪除的數(shù)據(jù),使用withTrashed(true)。
$res = User::withTrashed(true)->select();
//如果需要獲取軟刪除過的數(shù)據(jù)
$res = User::onlyTrashed()->select();
//刪除id是15的記錄,如果開啟軟刪除,會進行假刪除
$res = User::destroy(15);
//如果開啟了軟刪除,需要真正地刪除數(shù)據(jù),不做軟刪除
//destory()第二個參數(shù)傳遞true
$res = User::destroy(15,true);
//delete()參數(shù)傳遞true
$userData = User::get(15);
$userData->delete(true);

更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。

希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計有所幫助。

您可能感興趣的文章:
  • Thinkphp5.0 框架Model模型簡單用法分析
  • Thinkphp5.0 框架使用模型Model添加、更新、刪除數(shù)據(jù)操作詳解
  • thinkphp5.1的model模型自動更新update_time字段實例講解

標(biāo)簽:江蘇 蚌埠 棗莊 衡水 衢州 廣元 大理 萍鄉(xiāng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Thinkphp5.0框架使用模型Model的獲取器、修改器、軟刪除數(shù)據(jù)操作示例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    白水县| 天祝| 蒙自县| 祁门县| 许昌市| 仁化县| 美姑县| 兴仁县| 彰化县| 沁阳市| 彭水| 定州市| 金塔县| 广水市| 溧阳市| 新源县| 延津县| 九江市| 西昌市| 明星| 兖州市| 英吉沙县| 双牌县| 太保市| 宜春市| 随州市| 北海市| 丹巴县| 朝阳区| 武定县| 美姑县| 彩票| 左权县| 昭通市| 顺昌县| 岳西县| 新竹县| 柯坪县| 玉山县| 炉霍县| 晋城|