## 模型对象
#### 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. 其它的属性值,在创建数据对象时,会自动获取。
- 前言[随时更新]
- 开发环境
- 1.Mac环境
- 2.windows环境
- 模型对象
- 1.创建模型对象
- 2.模型初始化
- 数据对象
- 1.定义数据对象
- 2.创建数据对象
- 1.data方法
- 2.setAttr方法
- 3.__set方法
- 4.查询数据对象
- 1.getData方法
- 2.getAttr方法
- 3.__get方法
- OOP难点总结
- 1.get_class( )实例讲解
- 2.get_called_class( )实例讲解
- 3.__call( )实例讲解
- 3.__callStatic( )实例讲解
- 4.call_user_func_array函数[重点]
- 5.普通方法与静态方法
- 6.在Model源码中的应用
- 7.new static 延迟静态绑定
- PHP标准化规范
- 查询数据
- 1.获取单条:get静态方法
- 2.获取单条:对象查询
- 3.获取多条:all静态方法
- 4.获取多条:对象查询
- 5.获取字段值:value方法
- 6.获取列值:column方法
- 7.动态查询:getBy字段名
- 8.助手函数:model查询
- 9.加载器:Loader类查询
- 10.数据库与模型查询对比
- 新增数据
- 1.sava方法
- 2.savaAll方法
- 3.create静态方法
- 4.insert静态调用
- 更新数据
- 1.单条更新:save方法
- 2.批量更新:saveAll方法
- 3.静态更新:update方法
- 4.查询类Query直接更新
- 5. 闭包更新
- 删除数据
- 1.删除当前记录:delete
- 2.静态条件删除:destory
- 获取器
- 1.模型方法:set属性Attr
- 修改器
- 1.set属性Attr
- 时间戳
- 1.MySQL中日期类型复习
- 2.时间戳功能详解
- 软删除[重点]
- 1.traits详解[选学内容]
- 2.SoftDelet类源码分析
- 3. delete实例删除
- 4.destroy条件删除
- 5.restore恢复数据
- 类型转换
- 1. 规则设置
- 2. 实例演示
- 查询范围
- 1. 基本概念
- 2.实例演示