【发布时间】:2014-04-24 10:15:33
【问题描述】:
我在 CakePhp 中制作了一个插件,我在插件中使用了多个模型。我使用控制台创建了这些模型并烘焙了它们。我在使用其中一种时遇到了问题,它只出现在这个特定的模型中。
模型文件名:
GamificationBadgeUnlockActionProgression.php
模型内容:
<?php
App::uses('GamificationAppModel', 'Gamification.Model');
class GamificationBadgeUnlockActionProgression extends GamificationAppModel {
function __construct() {
parent::__construct();
echo 'oleej';
exit;
}
public $belongsTo = array(
'GamificationBadgeProgression' => array(
'className' => 'GamificationBadgeProgression',
'foreignKey' => 'gamification_badge_progression_id'
),
'GamificationBadgeUnlockAction' => array(
'className' => 'GamificationBadgeUnlockAction',
'foreignKey' => 'gamification_badge_unlock_action_id'
)
);
public function addMissingProgression($missingProgression)
{
/*$this->saveMany($missingProgression, array(
'fieldlist' => array('gamification_badge_progression_id', 'gamification_badge_unlock_action_id')
));*/
}
}
在我拥有的插件控制器中:
public $uses = array('Gamification.GamificationBadge',
'Gamification.GamificationBadgeProgression',
'Gamification.GamificationBadgeUnlockAction',
'Gamification.GamificationBadgeUnlockActionProgression',
'Gamification.GamificationBadgeUnlockType');
正在加载所有其他模型,“Gamification.GamificationBadgeUnlockActionProgression”除外。这很奇怪。它具有所有必需的东西,并且遵循命名约定和一切。 它只是没有被加载,因为构造函数从未被调用并且 echo 从未显示。
当我像这样使用数组作为参数从模型中调用函数时:
$this->GamificationBadgeUnlockActionProgression->addMissingProgression($missingProgression);
然后我得到一个错误
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'addMissingProgression' at line 1
因为模型没有加载。
但是 CakePhp 确实创建了一个同名的魔术模型,这导致了上面的错误,因为模型神奇地存在,但函数当然不存在,关系也不存在。
我在这里错过了什么?
【问题讨论】:
-
您可以通过
ClassRegistry::isKeySet('Name of your model');查看模型是否加载的天气 -
是的,因为 cakephp 创造了它的神奇版本
标签: php cakephp cakephp-2.0 mysql-error-1064