在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());//返回原始數據
在model中使用 set+字段名+Attr,能夠修改字段值,方便添加數據時使用。加密
示例,好比密碼須要MD5加密:spa
model:code
//對密碼字段加密以後存儲 //第一個參數是密碼 //第二個參數是添加的數據,可選 public function setPasswordAttr($val,$data){ if($val === '') { return $val; }else{ return md5($val.$data['email']); } }
model:blog
//添加和修改時,都會自動完成的字段 protected $auto = ['addtime']; public function setAddtimeAttr(){ return time(); }
model:md5
protected $insert = ['addtime']; public function setAddtimeAttr(){ return time(); }
model:get
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);