我将2个模型加载到我的控制器中。
var $uses = array( 'Territoryset', 'Users.User' );
我从模型中调用一个函数
$users = $this->User->getUsersList();
我有一个错误:
pg_query()[function.pg-query]:查询失败:错误:getUsersList或其附近的语法错误
我更改了$ uses
的顺序var $uses = array('Users.User', 'Territoryset');
然后我没有得到任何错误。我无法解释为什么呼叫顺序会产生影响?
答案 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
模型的顺序产生影响的原因是因为它确定User
或Users.User
(由于区域集模型中缺少的插件前缀)是首先引用此模型名称,因此哪个对象填充类注册表,以及为User
或*.User
的所有后续引用返回哪个对象。