D()方法的寻找顺序
2018-06-22 04:58:51来源:未知 阅读 ()
使用 D()方法比直接使用模型类更加的智能,如果在HomeModelUserModel 找不到该模型类, 那么就会去公共模块下找CommonModelUserModel 去找。 如果还找不到,就会直接实例化基类 Model()类,也就是等同于使用 M()方法。
需要注意的是:D(‘User’)方法中的表名需要首字母大写,因为查找跳到公共模块里时无法识别小写的user,除非你显式的写成:D(‘Common/user’),这样完整的写法用小写user也行,否则若你直接用 D(‘user’) 的话,它会跳过公共模块直接去实例化基类Model()。因此建议养成表的首字母大字的习惯,以防出错。
当然,上述问题主要是由于用小写的user时:
D('user')方法在 Home 模块里可以识别,直接实例化也没问题,唯有跨模块(比如Common)仿问时才会发生。当然,M('user')方法用小写也可以识别。
另外,如果使用索引数组作为查询条件也要注意:
D('User')方法查找到的模型如果有手工定义数据字段的话,那么查询将无法生效。意思是这样滴:
namespace HomeModel;
use ThinkModel;
class UserModel extends Model{
protected $fields=array( // 这是手工定义字段
'id',
'user',
'_pk'=>'id',
'type'=>array(
'id'=>'smallint',
'user'=>'varchar'
)
);
// ...
}
此时在控制器下使用如下代码时:
$user=D('User');
$c['id']=2;
$c['user']='樱桃小丸子';
print_r($user->where($c)->select()); // 使用索引数组查询
将不会查询到结果,除非注释掉手工字段,或者使用M(‘User’)方法。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- ThinkPHP3.1.x修改成功与失败跳转页面的方法 2020-03-22
- PHP实现打包下载文件的方法示例 2020-03-17
- PHP获取数组中单列值的方法 2020-03-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash