将模型加载到Controller CakePHP 1.3时出错

时间:2016-12-13 12:09:40

标签: cakephp cakephp-1.3

我将2个模型加载到我的控制器中。

var $uses = array( 'Territoryset', 'Users.User' );

我从模型中调用一个函数

$users = $this->User->getUsersList();

我有一个错误:

  

pg_query()[function.pg-query]:查询失败:错误:getUsersList或其附近的语法错误

我更改了$ uses

的顺序
var $uses = array('Users.User', 'Territoryset');

然后我没有得到任何错误。我无法解释为什么呼叫顺序会产生影响?

1 个答案:

答案 0 :(得分:3)

缺少插件前缀

  

确实,BelongsTo在领土上有一种关系。

var $belongsTo = array(   
    'User' => array( 
        'className' => 'User', # <- no plugin prefix
        ...

有关背景信息,请参阅the docs regarding loading plugin models

通过加载belongsTo关联定义的行为,此模型定义将导致以下两个代码示例返回模型model/user.php的实例(如果存在)或AppModel(如果不存在):

$x = ClassRegistry::init('User'); 
$x = ClassRegistry::init('Users.User');

本质上这是由于php4中没有名称空间的限制 - 它不可能加载两个具有相同名称的类,因此加载给定名称的第一个类获胜。

第一次使用别名'Users.User'来引用用户模型时,文件plugins/users/model/user.php中的类将被加载(如果存在),然后是一个实例将为这两个代码示例返回此类:

$x = ClassRegistry::init('User'); 
$x = ClassRegistry::init('Users.User');

因此uses模型的顺序产生影响的原因是因为它确定UserUsers.User(由于区域集模型中缺少的插件前缀)是首先引用此模型名称,因此哪个对象填充类注册表,以及为User*.User的所有后续引用返回哪个对象。