CakePHP не загружает поведение связанных моделей на плагин

Я программирую плагин для приложения CakePHP, который имеет следующие модели:

Предрегистрационная модель

App::uses('PreinscriptionAppModel', 'Preinscription.Model');

class Preregistry extends PreinscriptionAppModel {

    public $hasMany = array(
        'Relative'
    );

    public $actsAs = array(
        'Date' => array(
            'birthday' => array(
               'format' => '%d/%m/%Y'
            ),
            'registry_date' => array(
                'format' => '%d/%m/%Y'
            )
        )
   );
}

Относительная модель

App::uses('PreinscriptionAppModel', 'Preinscription.Model');

class Relative extends PreinscriptionAppModel {
    public $name = 'Relative';

    public $actsAs = array(
        'Date' => array(
            'birthday' => array(
                'format' => '%d/%m/%Y'
            )
        )
    );

    public $belongsTo = array(
        'Preregistry'
    );
}

Соответствующей частью Контроллера является:

<?php

App::uses('PreinscriptionAppController', 'Preinscription.Controller');

class PreregistriesController extends PreinscriptionAppController {
    public function add() {
        $preregistryDateConfig = $this->Preregistry->getDateConfig();
        $relativeDateConfig = $this->Preregistry->Relative->getDateConfig();
    }
}

Проблема у меня при звонке $this->Preregistry->Relative->getDateConfig(); Дата поведения не загружается на Relative модель, поэтому он выдает ошибку MySQL, потому что модель не имеет getDateConfig() метод.

Когда я проверяю, загружено ли поведение $this->Preregistry->Relative->Behaviors->loaded('Date'); я вернул ЛОЖЬ.

По какой-то причине Поведение загружается только в Preregistry модель, но не на Relative модель. Я также пытался загрузить Поведение на лету, но безуспешно.

Если кто-то может сказать мне обойти эту проблему, я буду очень рад.

Если вам нужно больше кода или чего-либо еще, не стесняйтесь спрашивать.

Спасибо!

1 ответ

Решение

Я точно уверен debug($this->Preregistry->Relative) покажет что Relative это пример AppModel,

Это потому, что в ваших ассоциациях отсутствует правильное имя плагина, оно должно быть:

public $hasMany = array(
    'Preinscription.Relative'
);

а также

public $belongsTo = array(
    'Preinscription.Preregistry'
);

в противном случае CakePHP не будет извлекать модели из плагина, но создаст экземпляр AppModel вместо ассоциаций (если нет Relative соответственный Preregistry в любом из настроенных местоположений модели), который затем, конечно, не хватает Date поведение.

Смотрите также http://book.cakephp.org/2.0/en/plugins.html

Другие вопросы по тегам