1. 程式人生 > 實用技巧 >Thinkphp5.0框架使用模型Model的獲取器、修改器、軟刪除資料操作示例

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);

更多關於thinkPHP相關內容感興趣的讀者可檢視本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術總結》。

希望本文所述對大家基於ThinkPHP框架的PHP程式設計有所幫助。