ホームページ >PHPフレームワーク >ThinkPHP >thinkPHP5モデルの修飾子とオートコンプリートの詳細な説明

thinkPHP5モデルの修飾子とオートコンプリートの詳細な説明

藏色散人
藏色散人転載
2021-02-11 10:13:463155ブラウズ

次のチュートリアル コラムでは、thinkPHP5 モデルのモディファイアとオートコンプリートについて紹介します。

1. 修飾子

thinkPHP5モデルの修飾子とオートコンプリートの詳細な説明 実際の開発プロセスでは、テーブルに保存するときに入力するパスワードなど、いくつかのフィールドを変更する必要があります。ユーザー登録 テーブルに保存するときに暗号化が必要なため、修飾子が使用されます。

修飾子はゲッターに似ており、モデル内に記述する必要があります。命名規則は、セット フィールド名 (キャメル ケース方式による) 属性です。

例: ユーザーを追加するとき、ユーザーのパスワードを暗号化する必要があります

ユーザー テーブルを作成する

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 app\index\model;
use think\Model;
class User extends Model{
    //密码的修改器
    public function setPasswordAttr($val){
        //此处做一些对用户传入值的处理
        return md5($val);
    }
}

コントローラーでユーザー データを追加します:

namespace app\index\controller;
use think\Controller;
use app\index\model\User;
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);
    }
}

実行後、データベースにはさらに多くのレコードがあり、パスワード フィールドはパスワード修飾子によって変更された値になります。

2. 自動補完

実際の開発で作成するテーブルフィールドには、基本的にレコードの作成時刻や更新時刻など、自動補完が必要なフィールドがあります。 、作成時刻など 人物ID(ログインしているユーザーのID)など この場合、テーブルのオートコンプリート機能を使用する必要があります。自動補完には、挿入および更新中の自動補完、挿入中の自動補完、更新中の自動補完の 3 種類があり、設定は、モデル内の

//插入和更新时均自动完成的字段
protected $auto = [];

//只在插入时自动完成的字段
protected $insert = [];

//只在更新时自动完成的字段
protected $update = [];

を使用して、挿入時に時刻フィールドを自動補完するように設定します。 create_time フィールドは挿入時に自動的に入力され、update_time フィールドは更新時に自動的に入力されます。自動完了の設定は以下の通りです

namespace app\index\model;
use think\Model;
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 app\index\controller;
use think\Controller;
use app\index\model\User;
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の3フィールドを実行した結果上記で追加されたデータ コードは次の図に示すとおりです。データを追加すると、time フィールドと create_time フィールドの両方が現在時刻に挿入され、update_time はデフォルト値 0 です。

# コントローラー内のデータを更新するコード:

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

実行 上記のデータ更新コードの後、現在時刻が update_time フィールドに追加され、time フィールドの値も現在時刻に更新されます。となり、create_time の値は変更されません。

## 修飾子を使用してオートコンプリート機能を実装するには、各モデルの各フィールドに修飾子を追加する必要があり、その結果、コードが肥大化します。 tp5 では、このための特別な設定があり、データベース接続設定ファイル (database.php) の auto_timestamp = false 項目を true に変更すると、各テーブルの create_time と update_time が自動的に完了します。 create_time フィールドと update_time フィールドは必ずしもすべてのテーブルに存在するわけではないため、tp5 はモデル内でそれらを構成するメソッドも提供します。

えええええ

以上がthinkPHP5モデルの修飾子とオートコンプリートの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。