ThinkPHP 模型(Model)实例化

模型实例化

当定义了模型之后,需要在操作中将模型实例化才能具体实现模型中的业务逻辑。

不同的数据业务规则会有不同的模型定义,而在实例化模型的时候也可能不同。ThinkPHP 支持如下几种实例化模型:

  1. 实例化基础模型类
  2. 实例化其他模型类
  3. 实例化用户自定义模型类
  4. 实例化空模型类

实例化基础模型类

ThinkPHP支持在没有定义任何模型的时候,实例化一个基础模型类来进行简单的 CURD 操作:

$User = new Model('User'); 

或者使用 M 快捷方法:

$User = M('User');
// 下面是其他一些对 user 表的操作
$User->select();

上面两个方法等同,参数为去掉前缀的表名(User),且首字母大写,关于模型命名参见《ThinkPHP 模型命名规范》。

这种方法只定义了基础模型,简单高效, 并且支持跨项目调用。缺点是因为没有自定义的模型类,因此无法写入相关的业务逻辑,只能完成基本的 CURD 操作。所以如果只是基本的 CURD 操作,建议实例化此种模型类型。

查看 M快捷方法 实例:《ThinkPHP 添加数据 add 方法

实例化其他模型类

实例化基础模型类,只能完成基本的 CURD 操作。如果只是需要扩展一些通用的逻辑,那么就可以实例化其他模型类:

$User = new CommonModel('User'); 

或者使用 M 快捷方法:

$User = M('User', 'CommonModel');

CommonModel(对应 Lib/Model/CommonModel.class.php 文件)类必须继承 Model 类,如果没有定义别名导入的话,放在项目 Lib/Model 目录下,系统自动加载。我们可以 在CommonModel 类里面定义一些通用的逻辑方法,就可以省去为每个数据表定义具体的模型类。

如果项目涉及的表非常多,而只有个别表有一些复杂的业务逻辑需要封装,那么上面这两种模型实例化方式相结合是一个不错的选择。

实例化用户定义的模型类

如果项目有较多的表需要实现逻辑业务,而不仅仅是简单的 CURD 操作,那就需要实例化自定义的模型类,如 UserModel(用户模型类)、GoodsModel(商品模型类)等。我们在定义的模型类里面实现逻辑业务,而在操作里面实例化该模型:

$User = new UserModel(); 

或者使用 D 快捷方法:

$User = D('User');

当使用到模型里面的一些高级功能如 自动验证填充 等,就需要用到 D 实例化模型方法而不能用 M 方法。

默认的 D方法 只能支持调用当前项目的模型,如果需要跨项目调用,需要使用:

$User = D('User', 'Admin');    // 实例化 Admin 项目下面的 User 模型
$User = D('Admin.User');        // 启用了项目分组

查看 D快捷方法 实例:《ThinkPHP 表单数据智能写入 create 方法

实例化空模型类

如果需要使用原生 SQL ,需要实例化一个空模型:

$Model = new Model();
// 执行原生 SQL 语句
$Model->query('SELECT * FROM think_user');

或者使用 M 快捷方法:

$User = M();

提示

本文介绍的模型定义与实例化偏向于理论,但在后面的开发中,对数据的操作都要用到模型的实例化,可根据项目实际情况采取不同的模型实例化方式。

本章节内容共分 4 部分:

  1. 1. ThinkPHP 模型(Model)与模型的定义
  2. 2. ThinkPHP 模型(Model)实例化
  3. 3. ThinkPHP 模型(Model)命名规范
  4. 4. ThinkPHP 中M方法和D方法的具体区别

评论于2016-12-18日起不再显示。

5idev.com(我爱开发网) — 提供最好的 XHTML教程DIV+CSS教程JavaScript教程PHP教程ThinkPHP教程