CakePhp 2.x-未加载插件模型

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

我正在用CakePhp制作一个插件,并且在插件中使用了多个模型。我使用控制台创建了这些模型并烘焙它们。我在使用其中一款时遇到了一个问题,它只出现在这个特定的型号上

模型文件名:
游戏化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'
    )
);