我正在编写一个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');
时,我得回FALSE。
出于某种原因,行为仅在Preregistry
模型中加载,而不在Relative
模型中加载。我也试图动态加载行为,但没有成功。
如果有人能告诉我这个问题的解决方法,我将非常高兴。
如果您需要更多代码或任何内容,请随时提出。
谢谢!
答案 0 :(得分:3)
我非常确定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#plugin-models