模型实例化

为方便框架的后续升级,thinkcmf与thinkphp框架模型操作方法完全一致。
所以这里是支持thinkphp原生的M方法和D方法来实例化模型;

实例化模型的好处:
可以实现自动完成,自动校验功能。使用模型封装的方法。分离M层和C层;

M方法:

M([‘模型名’],[‘数据表前缀’],[‘数据库连接信息’]);

  1. //实例化模型
  2. $User=M('User');
  3. // 执行具体的数据操作
  4. $User->select();

M方法仅支持基本的CURD操作;但是性能会较D方法高。
如果你的模型类有自己的业务逻辑,M方法是无法支持的,就算是你已经定义了具体的模型类,M方法实例化的时候是会直接忽略。
M方法的特殊用法:
$model=M();//实例化空模型;

$model->query(‘select * from cmf_user where id=1’);//使用原生sql语句进行查询id为1的用户

D方法:

假设当前模块为Home;
D(‘User’);D(‘Home/User’);是一样的;

如果在Linux环境下面,一定要注意D方法实例化的时候的模型名称的大小写。
D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化系统的\Think\Model基类,同时对于已实例化过的模型,不会重复实例化。
D方法的参数就是模型的名称,并且和模型类的大小写定义是一致的,例如:
参数 实例化的模型文件
User 对应的模型类文件的 \Home\Model\UserModel.class.php
UserType 对应的模型类文件的 \Home\Model\UserTypeModel.class.php

用法示例:

  1. //实例化模型
  2. $User = D('User');
  3. // 相当于 $User = new \\Home\\Model\\UserModel();
  4. // 执行具体的数据操作
  5. $User->select();
  6. //$User->diy_select();//diy_select方法是您在\\Home\\Model\\UserModel.class.php中自定义的方法。

当 \Home\Model\UserModel 类不存在的时候,D函数会尝试实例化公共模块下面的 \Common\Model\UserModel 类
D方法还可以支持跨模块调用,需要使用:

  1. //实例化Admin模块的User模型
  2. D('Admin/User');
  3. //实例化Extend扩展命名空间下的Info模型
  4. D('Extend://Editor/Info');

注意:跨模块实例化模型类的时候 不支持自动加载公共模块的模型类

M方法和D方法的区别

  1. M方法不用加载具体模型类效率更高。但仅能实现基础的CURD;
  2. D方法会先实例化具体的模型类,找不到后自动调用M方法来实例化模型类

名词解释

  1. CURD(Create,Update,Read,Delete),数据库的增删查改操作

参考文献:

  1. http://www.kancloud.cn/manual/thinkphp/1729