真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

thinkPHP5模型中修改器和自動(dòng)完成的示例分析

這篇文章主要介紹了thinkPHP5模型中修改器和自動(dòng)完成的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)建站專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、息烽網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為息烽等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

一、修改器

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

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

實(shí)例:添加用戶時(shí),用戶的密碼需要加密

創(chuàng)建用戶表

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 '用戶手機(jī)號',
  `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 '時(shí)間',
  `create_time` int(10) NOT NULL DEFAULT '0' COMMENT '創(chuàng)建時(shí)間',
  `update_time` int(10) NOT NULL DEFAULT '0' COMMENT '更新時(shí)間',
  `status` tinyint(3) NOT NULL DEFAULT '1' COMMENT '記錄狀態(tài) -1刪除 0禁用 1正常',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

模型中添加密碼修改器:

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

控制器中添加用戶數(shù)據(jù):

namespace app\index\controller;
use think\Controller;
use app\index\model\User;
class Index extends Controller{
    public function index(){
        //模擬傳入的post表單數(shù)據(jù)
        $data = [
            'username' => 'Emrys',
            'password' => 'emrys',
            'email' => 'emrys126.com',
            'mobile' => '13955555555',
            'sex' => 1,
            'age' => 18
        ];

        //添加用戶數(shù)據(jù)
        $res = User::create($data);
        dump($res);
    }
}

運(yùn)行后數(shù)據(jù)庫多了記錄,密碼字段是經(jīng)過密碼修改器改變后的值。

thinkPHP5模型中修改器和自動(dòng)完成的示例分析

二、自動(dòng)完成

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

//插入和更新時(shí)均自動(dòng)完成的字段
protected $auto = [];

//只在插入時(shí)自動(dòng)完成的字段
protected $insert = [];

//只在更新時(shí)自動(dòng)完成的字段
protected $update = [];

現(xiàn)設(shè)置time字段在插入和更新時(shí)均自動(dòng)完成、create_time字段在插入時(shí)自動(dòng)完成、update_time字段在更新時(shí)自動(dòng)完成。自動(dòng)完成設(shè)置如下,

namespace app\index\model;
use think\Model;
class User extends Model{
	//自動(dòng)完成,插入和更新時(shí)都自動(dòng)執(zhí)行
	protected $auto = [
		'time'
	];

	//只在插入時(shí)完成
	protected $insert = [
		'create_time'
	];

	//只在數(shù)據(jù)更新時(shí)完成
	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);
	}

	//時(shí)間修改器
	public function setTimeAttr(){
		return time();
	}

	//創(chuàng)建時(shí)間修改器
	public function setCreateTimeAttr(){
		return time();
	}

	//更新時(shí)間修改器
	public function setUpdateTimeAttr(){
		return time();
	}
}

控制器中添加數(shù)據(jù)、更新數(shù)據(jù)完成測試,

namespace app\index\controller;
use think\Controller;
use app\index\model\User;
class Index extends Controller{
    public function index(){
        //模擬傳入的post表單數(shù)據(jù)
        $data = [
            'username' => 'Emrys',
            'password' => 'emrys',
            'email' => 'emrys126.com',
            'mobile' => '13955555555',
            'sex' => 1,
            'age' => 18
        ];

        //添加用戶數(shù)據(jù)
        $res = User::create($data);
        dump($res);
    }
}

執(zhí)行上述添加數(shù)據(jù)代碼的time、create_time、update_time三字段的運(yùn)行結(jié)果如下圖所示,添加數(shù)據(jù)時(shí)time和create_time字段均插入當(dāng)前時(shí)間,update_time是默認(rèn)值0.

thinkPHP5模型中修改器和自動(dòng)完成的示例分析

控制器中更新數(shù)據(jù)的代碼:

namespace app\index\controller;
use think\Controller;
use app\index\model\User;
class Index extends Controller{
    public function index(){
        //更新數(shù)據(jù)
        $user = User::get(12);
        $user->age = 120;
        $res = $user->save();
        dump($res);
    }
}

執(zhí)行上方的更新數(shù)據(jù)代碼后,update_time字段添加了當(dāng)前時(shí)間,time字段的值也更新為當(dāng)前時(shí)間,create_time的值未發(fā)生改變。

thinkPHP5模型中修改器和自動(dòng)完成的示例分析

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

//開啟自動(dòng)寫入時(shí)間戳
protected $autoWriteTimestamp = true;

//默認(rèn)的時(shí)間戳是create_time和update_time,可通過如下進(jìn)行修改。如果不想在插入或更新數(shù)據(jù)時(shí)添加該字段的值,則設(shè)置為false
protected $createTime = false;
protected $updateTime = '這里是真實(shí)表中的更新時(shí)間字段';

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“thinkPHP5模型中修改器和自動(dòng)完成的示例分析”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!


網(wǎng)站欄目:thinkPHP5模型中修改器和自動(dòng)完成的示例分析
網(wǎng)頁路徑:http://weahome.cn/article/ijgdgg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部