TP中用D方法创建了模型后,为何调用不了creat,add等方法??!

在TP框架中,若出现creat ,add等方法,应从两方面考虑:

第一,是否有引入正确的命名空间;

第二,实例化的表名是否正确。


拓展:来自:http://www.ithao123.cn/content-3014378.html

D()与M()方法中,表名的设置注意:

使用 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’)方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值