## 模型对象 #### 1.定义:特定数据表字段信息的对象描述; >[info] 从定义可以分析出二点: > 1. 数据表的描述与模型定久是绑定的; > 2. 数据表的字段与模型对象的属性是绑定的; * * * * * #### 2. 步骤: 1. 创建与数据表对应的模型类; 2. 控制器进行调用; * * * * * #### 3. 实例. 创建与tp5_staff数据表的模型类 1. 创建tp5_staff数据表 * staff数据表结构如下: | 序号 | 字段名 | 类型 | 宽度 | 约束 | 默认值|备注 | | --- | --- | --- | --- | --- | --- | | 1 | id | 整型 | 4位 | 无符号、不为空、自增、主键|无 | 编号 | | 2 | name | 变长字符串 | 30位 | 不为空 | 无 |姓名 | | 3 | sex | 整型 | 1位 | 不为空 | 1 |性别1男0女| | 4 | salary |浮点型 | 共10位小数2位 |无符号、不为空 |2000 |工资| | 5 | dept |变长字符串 | 20位 |不为空 | 开发部 |部门| | 6 | hiredate |日期 | 默认 | 不为空 | 0000-00-00 |入职日期| * 创建语句如下: ~~~ CREATE TABLE IF NOT EXISTS staff ( id INT(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号', name VARCHAR(30) NOT NULL COMMENT '姓名', sex TINYINT(2) unsigned NOT NULL DEFAULT 1 COMMENT '性别1男0女', salary FLOAT(10,2) NOT NULL DEFAULT 2000.00 COMMENT '工资', dept VARCHAR(20) NOT NULL DEFAULT '开发部' COMMENT '部门' , hiredate DATE NOT NULL DEFAULT '0000-00-00' COMMENT '入职日期', PRIMARY KEY (id) )ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1001; ~~~ 2. 针对该表创建与之对应的模型类: * 第一步:创建模型类:Staff.php * 在应用目录application的Index模块下创建model目录,用来存放模型类文件 * 在/application/index/model/目录下创建:Staff.php: ~~~ <?php namespace app\index\model; //导入模型类 use think\model; //定义类Staff,继承model类 class Staff extends model { //此处是自定义模型类代码,目前为空 } } ~~~ >[warning] model类是抽象类,必须由子类继承后才可以使用。 ### “就这么简单,模型创建成功了!” * 第二步: 下面演示如何调用这个模型类Staff: * 创建控制器Index.php: ~~~ <?php namespace app\index\controller; //导入模型类 use app\index\model\Staff; class Index { public function index(){ //创建模型类Staff $model = new Staff(); //查看Staff类实例$model dump($model); } } ~~~ * 第三步: 测试模型对象Staff * 浏览器访问这个控制器: tp5.com/index.php/index/index/index/ * Staff类实例:$model对象内容如下: >[info] 为教学方便,部分注释比源码要详细 ~~~ //该对象共计有28个受保护属性,必须在本类或子类中使用,外部不能直接使用 object(app\index\model\Staff)#5 (28) { //数据库配置数组 ["connection":protected] => array(0) { } //数据库查询对象,负责最终完成对数据库的操作 ["query":protected] => NULL //模型名称 ,创建时自动赋值 ["name":protected] => string(5) "Staff" //与模型绑定的数据表的完整名称(包括前缀的表名,如:tp5_staff) ["table":protected] => NULL //用命名空间表示的、当前的模型类名:Staff ["class":protected] => string(21) "app\index\model\Staff" //出错时显示的信息 ["error":protected] => NULL //字段验证规则 ["validate":protected] => NULL //数据表主键 ["pk":protected] => NULL //数据表字段名列表(与数据表对应) ["field":protected] => array(0) { } //只读字段列表 ["readonly":protected] => array(0) { } //显示字段列表 ["visible":protected] => array(0) { } //隐藏属性字段列表 ["hidden":protected] => array(0) { } //追加属性列表 ["append":protected] => array(0) { } //与数据表字段对应的信息列表(极其重要) ["data":protected] => array(0) { } //字段修改信息列表 ["change":protected] => array(0) { } //自动完成列表 ["auto":protected] => array(0) { } //新增自动完成列表 ["insert":protected] => array(0) { } //更新自动完成列表 ["update":protected] => array(0) { } // 是否需要自动写入时间戳 如果设置为字符串 则表示时间字段的类型 ["autoWriteTimestamp":protected] => bool(false) //设置表中:创建时间字段的名称 ["createTime":protected] => string(11) "create_time" //设置表中:更新时间字段的名称 ["updateTime":protected] => string(11) "update_time" //设置表中:时间字段的格式 ["dateFormat":protected] => string(11) "Y-m-d H:i:s" //数据表中各字段类型定义 ["type":protected] => array(0) { } //是否是:更新操作 ["isUpdate":protected] => bool(false) //更新条件 ["updateWhere":protected] => NULL //当前执行的关联条件 ["relation":protected] => NULL //验证失败是否抛出异常 ["failException":protected] => bool(false) //全局查询范围设置 ["useGlobalScope":protected] => bool(true) } ~~~ * * * * * #### 4. 总结: 1. 目前创建的模型虽然按相关规则,已经与特定数据表绑定了,但是该类的绝大多数属性的值,仍处于默认或不确定状态; 2. 现在该模型中有二个属性值是确定的: * $name //模型名称 * $class //模型类命名空间,即如何找到这个类 3. 其它的属性值,在创建数据对象时,会自动获取。