Thinkphp5.0 的使用模型Model的獲取器與修改器

Thinkphp5.0 的使用模型Model的獲取器、修改器、軟刪除


 1、獲取器

在model中使用 get+字段名+Attr,能夠修改字段的返回值。php

數據庫中性別保存爲,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:app

        $res = TestUser::get(2);
        dump($res->toArray());//性別會被model轉化
        dump($res->getData());//返回原始數據

 2、模型修改器:

在model中使用 set+字段名+Attr,能夠修改字段值,方便添加數據時使用。加密

示例,好比密碼須要MD5加密:spa

model:code

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

 3、自動完成:

model:blog

    //添加和修改時,都會自動完成的字段
    protected $auto = ['addtime'];

    public function setAddtimeAttr(){
        return time();
    }

 3、添加數據時,自動完成:

model:md5

    protected $insert = ['addtime'];

    public function setAddtimeAttr(){
        return time();
    }

 4、修改數據時,自動完成:

model:get

    protected $update = ['addtime'];

    public function setAddtimeAttr(){
        return time();
    }

5、自動完成時間戳

在數據庫配置文件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
}
 

6、軟刪除

軟刪除:當刪除條記錄時,有時咱們須要假刪除,只經過修改某個字段狀態來標記記錄已刪除。

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);
相關文章
相關標籤/搜索