CakePhp 2.x-未加载插件模型
我正在用CakePhp制作一个插件,并且在插件中使用了多个模型。我使用控制台创建了这些模型并烘焙它们。我在使用其中一款时遇到了一个问题,它只出现在这个特定的型号上 模型文件名:CakePhp 2.x-未加载插件模型,php,cakephp,cakephp-2.0,mysql-error-1064,Php,Cakephp,Cakephp 2.0,Mysql Error 1064,我正在用CakePhp制作一个插件,并且在插件中使用了多个模型。我使用控制台创建了这些模型并烘焙它们。我在使用其中一款时遇到了一个问题,它只出现在这个特定的型号上 模型文件名: 游戏化BadgeUnlockActionProgression.php 模型内容: <?php App::uses('GamificationAppModel', 'Gamification.Model'); class GamificationBadgeUnlockActionProgressi
游戏化BadgeUnlockActionProgression.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')
));*/
}
}
正在加载除“Gamification.GamificationBadgeUnlockActionProgression”之外的所有其他模型。这很奇怪。它有所有必需的东西,并且遵循命名约定和所有东西。
它只是没有被加载,因为从未调用构造函数,也从未显示回显
当我使用数组作为参数从模型中调用函数时:
$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确实创建了一个同名的魔法模型,这导致了上述错误,因为该模型神奇地激活了,但是函数当然没有,关系也没有
我在这里遗漏了什么?当模型没有正确加载时会抛出这种错误,它试图将方法作为SQL函数执行,而SQL函数显然不存在。在控制器顶部,检查是否有:
App::uses('GamificationBadgeUnlockActionProgression', 'Gamification.Model');
再加上$uses数组中已有的Gamification.GamificationBadgeUnlockActionProgression
,应该足以让它加载。如果仍然失败,作为最后一种手段,您可以使用回退方式手动将其加载到方法中,如:
if (!is_object($this->GamificationBadgeUnlockActionProgression)) {
ClassRegistry::init('Gamification.GamificationBadgeUnlockActionProgression');
$this->GamificationBadgeUnlockActionProgression = new GamificationBadgeUnlockActionProgression();
}
这将手动加载模型并在$this->GamificationBadgeUnlockActionProgression
下为其创建实例
模型中的关联中似乎也有错误,它应该包括插件前缀,如:
public $belongsTo = array(
'GamificationBadgeProgression' => array(
'className' => 'Gamification.GamificationBadgeProgression',
'foreignKey' => 'gamification_badge_progression_id'
),
'GamificationBadgeUnlockAction' => array(
'className' => 'Gamification.GamificationBadgeUnlockAction',
'foreignKey' => 'gamification_badge_unlock_action_id'
)
);
如果行得通就没有了。手动加载也不起作用,因为CakePHP创建了一个同名的神奇模型。我可以使用所有默认函数,如$this->GamificationBadgeUnlockActionProgression->find('all'),但我无法创建我的then of the当然更好,当我尝试手动加载它时,正如你所说,哪个应该工作返回错误:“GamificationBadgeUnlockActionProgression”类不是found@DijkeMark可能与我刚刚在您的模型中发现的错误有关,它可能会导致模型无法正确加载,因为关联似乎已关闭。请参阅我的更新答案,以解决此问题。好的,它似乎正在工作。在类名之前添加插件就成功了。这仍然很奇怪,因为插件中的其他模型不需要它来工作。您可以通过
ClassRegistry::isKeySet('Name of your model')检查模型是否加载代码>是的,因为cakephp创建了一个神奇的版本
public $belongsTo = array(
'GamificationBadgeProgression' => array(
'className' => 'Gamification.GamificationBadgeProgression',
'foreignKey' => 'gamification_badge_progression_id'
),
'GamificationBadgeUnlockAction' => array(
'className' => 'Gamification.GamificationBadgeUnlockAction',
'foreignKey' => 'gamification_badge_unlock_action_id'
)
);