站長資訊網
        最全最豐富的資訊網站

        詳解thinkPHP5模型中的修改器和自動完成

        下面由thinkphp教程欄目給大家介紹thinkPHP5模型中的修改器和自動完成,希望對需要的朋友有所幫助!

        詳解thinkPHP5模型中的修改器和自動完成

        一、修改器

        實際開發過程中,一些字段在存儲到表中時需要做些修改,如用戶注冊時填寫的密碼在表中存儲時需要加密,修改器因此產生。

        修改器同獲取器類似,需要寫在模型中,其命名規則為set + 字段名(按駝峰法) + Attr。

        實例:添加用戶時,用戶的密碼需要加密

        創建用戶表

        CREATE TABLE `tp_user` (   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,   `username` varchar(60) NOT NULL DEFAULT '',   `password` char(32) NOT NULL DEFAULT '',   `mobile` varchar(15) NOT NULL DEFAULT '' COMMENT '用戶手機號',   `email` varchar(100) NOT NULL DEFAULT '',   `sex` tinyint(3) NOT NULL DEFAULT '0' COMMENT '性別 0未知 1男 2女',   `age` tinyint(3) unsigned NOT NULL DEFAULT '0',   `time` int(10) NOT NULL DEFAULT '0' COMMENT '時間',   `create_time` int(10) NOT NULL DEFAULT '0' COMMENT '創建時間',   `update_time` int(10) NOT NULL DEFAULT '0' COMMENT '更新時間',   `status` tinyint(3) NOT NULL DEFAULT '1' COMMENT '記錄狀態 -1刪除 0禁用 1正常',   PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

        模型中添加密碼修改器:

        namespace appindexmodel; use thinkModel; class User extends Model{     //密碼的修改器     public function setPasswordAttr($val){         //此處做一些對用戶傳入值的處理         return md5($val);     } }

        控制器中添加用戶數據:

        namespace appindexcontroller; use thinkController; use appindexmodelUser; class Index extends Controller{     public function index(){         //模擬傳入的post表單數據         $data = [             'username' => 'Emrys',             'password' => 'emrys',             'email' => 'emrys126.com',             'mobile' => '13955555555',             'sex' => 1,             'age' => 18         ];          //添加用戶數據         $res = User::create($data);         dump($res);     } }

        運行后數據庫多了記錄,密碼字段是經過密碼修改器改變后的值。

        詳解thinkPHP5模型中的修改器和自動完成

        二、自動完成

        實際開發中創建的表字段基本都存在需要自動完成的字段,如記錄創建時間、更新時間、創建人id(登錄用戶的id)等,這時就需要用到表的自動完成功能。自動完成包括插入和更新時都自動完成、插入時自動完成、更新時自動完成三種,其設置是在模型中使用

        //插入和更新時均自動完成的字段 protected $auto = [];  //只在插入時自動完成的字段 protected $insert = [];  //只在更新時自動完成的字段 protected $update = [];

        現設置time字段在插入和更新時均自動完成、create_time字段在插入時自動完成、update_time字段在更新時自動完成。自動完成設置如下,

        namespace appindexmodel; use thinkModel; class User extends Model{ 	//自動完成,插入和更新時都自動執行 	protected $auto = [ 		'time' 	];  	//只在插入時完成 	protected $insert = [ 		'create_time' 	];  	//只在數據更新時完成 	protected $update = [ 		'update_time' 	];  	//獲取器 	public function getSexAttr($val){ 		switch ($val) { 			case '1': 				return '男'; 				break; 			case '2': 				return '女'; 				break; 			default: 				return '保密'; 				break; 		} 	}  	//密碼的修改器 	public function setPasswordAttr($val){ 		return md5($val); 	}  	//時間修改器 	public function setTimeAttr(){ 		return time(); 	}  	//創建時間修改器 	public function setCreateTimeAttr(){ 		return time(); 	}  	//更新時間修改器 	public function setUpdateTimeAttr(){ 		return time(); 	} }

        控制器中添加數據、更新數據完成測試,

        namespace appindexcontroller; use thinkController; use appindexmodelUser; class Index extends Controller{     public function index(){         //模擬傳入的post表單數據         $data = [             'username' => 'Emrys',             'password' => 'emrys',             'email' => 'emrys126.com',             'mobile' => '13955555555',             'sex' => 1,             'age' => 18         ];          //添加用戶數據         $res = User::create($data);         dump($res);     } }

        執行上述添加數據代碼的time、create_time、update_time三字段的運行結果如下圖所示,添加數據時time和create_time字段均插入當前時間,update_time是默認值0.

        詳解thinkPHP5模型中的修改器和自動完成

        控制器中更新數據的代碼:

        namespace appindexcontroller; use thinkController; use appindexmodelUser; class Index extends Controller{     public function index(){         //更新數據         $user = User::get(12);         $user->age = 120;         $res = $user->save();         dump($res);     } }

        執行上方的更新數據代碼后,update_time字段添加了當前時間,time字段的值也更新為當前時間,create_time的值未發生改變。

        詳解thinkPHP5模型中的修改器和自動完成

        使用修改器的方式實現自動完成功能需要在每個模型中添加各字段的修改器,這樣造成代碼臃腫。 tp5為此有專門的配置,在數據庫連接配置文件database.php中的auto_timestamp = false項,改為true,即可在每個表中進行create_time、update_time的自動完成。由于不是每個表中一定存在create_time和update_time字段,因此tp5也提供了在模型中配置的方法。

        //開啟自動寫入時間戳 protected $autoWriteTimestamp = true;  //默認的時間戳是create_time和update_time,可通過如下進行修改。如果不想在插入或更新數據時添加該字段的值,則設置為false protected $createTime = false; protected $updateTime = '這里是真實表中的更新時間字段';

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲欧美国产精品第1页| 久久精品国产网红主播| 亚洲精品乱码久久久久久久久久久久 | 亚洲欧洲国产精品你懂的| 真实国产乱子伦精品一区二区三区| 四虎国产精品永久地址99新强| 少妇精品无码一区二区三区 | 在线观看自拍少妇精品| 国产精品亚洲mnbav网站| 成人伊人精品色XXXX视频| 亚洲精品自在在线观看| 久久久WWW成人免费精品| 国产精品gz久久久| 青青青国产依人精品视频 | 国产精品天天看天天狠| 亚洲一区爱区精品无码 | 99热日韩这里只有精品| 精品国产欧美另类一区| 2022年国产精品久久久久| 久久精品欧美日韩精品| 亚洲AV无码久久精品狠狠爱浪潮| 亚洲精品专区在线观看| 日韩午夜高清福利片在线观看欧美亚洲精品suv | 无码少妇精品一区二区免费动态 | 午夜精品乱人伦小说区| 中文字幕一精品亚洲无线一区| 欧洲精品码一区二区三区免费看| 精品久久久久久无码人妻蜜桃| 国产香蕉国产精品偷在线| 国产精品午夜久久| 国产麻豆精品入口在线观看| 国产成人99久久亚洲综合精品| 亚洲国产精品成| 99久久精品这里只有精品| 91精品国产综合久久香蕉| 国产精品被窝福利一区| 国产高清在线精品一区二区| 国产小呦泬泬99精品| 久久国产精品一区| 午夜成人精品福利网站在线观看 | 大伊香蕉精品视频在线导航|