模型实例化
当定义了模型之后,需要在操作中将模型实例化才能具体实现模型中的业务逻辑。
不同的数据业务规则会有不同的模型定义,而在实例化模型的时候也可能不同。ThinkPHP 支持如下几种实例化模型:
- 实例化基础模型类
- 实例化其他模型类
- 实例化用户自定义模型类
- 实例化空模型类
实例化基础模型类
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();
提示
本文介绍的模型定义与实例化偏向于理论,但在后面的开发中,对数据的操作都要用到模型的实例化,可根据项目实际情况采取不同的模型实例化方式。