返回模型概念和基本......登陆

模型概念和基本操作

Toney2018-12-21 12:40:41310

一、创建模型

1. 编程方式: application/index/model/Staff.php

2. 命令方式:

(1)切换think命令所在目录下;

(1)运行: php think make:model index/Staff,自动创建index/model/Staff.php,如果没有

model目录,则自动创建;

(2)运行: php think make:model Staff,如果省略模块名,默认为common模块,

模型位于:application/common/model/Staff.php,common模块如果不存在也会自动创建;

3. 默认情况下:Staff模型与数据表staff对应

 

--------------------------------------------------------------------------------

 

二、调用模型

use app\index\model\Staff;

1. 实例化调用: $staff = new Staff();

2. 静态查询调用: $staff = Staff::get();

3. 助手函数调用: $staff = model('Staff');

不推荐用助手函数,因为model()无法调用模型静态方法

 

 

 

一、Db与模型的区别与联系?

1.Db和模型的职责和定位不同;

2.Db负责的只是数据(表)访问;

3.模型是业务数据和业务逻辑的完美封装;

4.Db是模型的基础,模型最终实现依赖Db实现;

5.重点来了:Db返回是数组,模型返回的是对象

可能同学们一时对这些描述不是很理解,相信随着学习的深入和开发经验的积累,会对模型有更深的理解。

 

--------------------------------------------------------------------------------

 

二、模型与数据表之间的关系

1.模型本质是一个类,继承自框架的think\Model.php类;

2.模型大多与一张数据表对应,但并不总是这样;

3.模型支持ORM(对象关系映射);

4.模型对应数据表,而模型实例(对象)对应表中的一条记录

5.模型支持更多的业务处理功能:自动完成,自动转换,自动验证等等,这是Db不具备的

 

--------------------------------------------------------------------------------

 

三、关于Db与模型的几个误区

1.认为模型效率不如直接操作Db,其实这点差别相对模型的便利性,简直可以直接忽略;

2.认为为每张数据表创建模型无意义,还麻烦,其实这是不对的,通过模型操作数据其实更加的安全可靠;

3.认为模型的操作不容易掌握,概念不容易理解,恰恰相反,模型相对Db更加的人性,也更贴近开发需求;

 

--------------------------------------------------------------------------------

 

四、模型的优势

1.可以更优雅的操作数据,完全面向对象编程;

2.可以更加的直观的实现多表的关联操作;

3.可以最大限度的保证用户数据的安全性和完整性;

4.可以非常方便的扩充业务逻辑功能;

5.可以极大的减少控制器中的业务逻辑代码.

 

--------------------------------------------------------------------------------

 

五、改进要求

1.如果模型中写了很少的代码,甚至是空模型,那么要检查你的业务规划是不是有了问题

2.如果控制器中写了大量的数据处理代码,那么最好将这些代码移到模型中去统一处理

 

 

一、获取器的创建与使用

1.获取是写在模型类中的一个方法

2.当用户通过模型获取表中数据时会自动触发,但也并非绝对如此

3.主要应用场景:用于从数据表中读取数据

(1)时间日期字段的格式化输出;

(2)集合或枚举类型的输出;

(3)数字状态字段的输出;

(4)组合字段的输出

4. 获取器方法命名规则:

get字段名Attr(字段值[,所有字段]),例如 getBirthdayAttr($value)

5. 可以读取不存在的字段信息

 

--------------------------------------------------------------------------------

 

二、修改器的创建与使用

1.修改器也是模型类中的一个方法

2.使用场景:

(1)时间日期字段的转换写入;

(2)集合或枚举类型的写入;

(3)数字状态字段的写入;

(4)某个字段涉及其它字段的条件或者组合写入

2.在以下5种情况下会触发修改器工作

(1)模型对象赋值;

(2)调用模型的data方法,并且第二个参数传入true;

(3)调用模型的save方法,并且传入数据;

(4)显式调用模型的setAttr方法;

(5)定义了该字段的自动完成;

 

--------------------------------------------------------------------------------

 

三、自动时间戳

1.添加与更新数据时,将时间自动写入到指定字段中

2.可以全局开启,也可以在模型中单独开启

(1)全局设置:config/database.php

  // 自动写入时间戳字段

      'auto_timestamp'  => false, //改为true

      如果当前模型中不需要自动时间戳功能,请手动关闭

      protected $autoWriteTimestamp = false;

(2)模型设置:

protected $autoWriteTimestamp = true;

**建议在模型中单独开启,这样最灵活,毕竟不是每一张表都需要时间戳字段

3.一旦开启该功能,用户更新或添加数据时会自动将操作时间写入到以下二个字段

(1)新增时间: create_time

(2)更新时间: update_time

以上这二个字段名是默认值,可以在模型中重新定义

4.不需要为这二个字段设置修改器,框架会自动处理

 

--------------------------------------------------------------------------------

 

三、类型转换

1.表中取出的数据,默认为字符类型

2.在模型中配置: protected $type = ['字段名' => '类型名称',...]

3.类型中没有字符型,因为它是默认类型,无须转换

--------------------------------------------------------------------------------

 

四、自动完成

1. 自动完成必须要配合修改器工作;

2. 自动完成是针对写操作: 新增与更新

3. 通过在模型中设置三个属性来配置

4. protected $insert = []; 新增时自动完成

5. protected $update = []; 更新时自动完成

6. protected $auto = []; 新增或更新时自动完成

7. 类似于给表中字段设置默认值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


最新手记推荐

• 用composer安装thinkphp框架的步骤• 省市区接口说明• 用thinkphp,后台新增栏目• 管理员添加编辑删除• 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消回复发送