ThinkPHP5模型实例详解
/ 创建模型对象
创建模型对象
模型对象
1.定义:特定数据表字段信息的对象描述;
从定义可以分析出二点:
- 数据表的描述与模型定久是绑定的;
- 数据表的字段与模型对象的属性是绑定的;
2. 步骤:
- 创建与数据表对应的模型类;
- 控制器进行调用;
3. 实例. 创建与tp5_staff数据表的模型类
- 创建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;
- 针对该表创建与之对应的模型类:
- 第一步:创建模型类:Staff.php
- 在应用目录application的Index模块下创建model目录,用来存放模型类文件
- 在/application/index/model/目录下创建:Staff.php:
<?php
namespace app\index\model;
//导入模型类
use think\model;
//定义类Staff,继承model类
class Staff extends model {
//此处是自定义模型类代码,目前为空
}
}
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对象内容如下:
为教学方便,部分注释比源码要详细
-
//该对象共计有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. 总结:
- 目前创建的模型虽然按相关规则,已经与特定数据表绑定了,但是该类的绝大多数属性的值,仍处于默认或不确定状态;
- 现在该模型中有二个属性值是确定的:
- $name //模型名称
- $class //模型类命名空间,即如何找到这个类
- 其它的属性值,在创建数据对象时,会自动获取。