我试图根据环境变量定义特定模型的关系 像这样:
class Book extends AppModel {
public function __construct($id = false, $table = null, $ds = null) {
parent::__construct($id, $table, $ds);
if (Configure::read('prefix') == 'admin') {
$this->hasMany['Page'] = array(
// ...
'conditions' => array( /* all pages */ )
);
} else {
$this->hasMany['Page'] = array(
// ...
'conditions' => array( /* only public pages */ )
);
}
}
}
你可能会说我应该在查询中应用这些条件。但是因为我正在处理深层嵌套的关系,所以我想保持条件集中。
现在出现的问题是:如果Page
模型与例如Paragraph
模型有关系$this->Book->find('first', array(
'conditions' => array('Book.id'=>1),
'contain' => array('Page' => array('Paragraph'))
));
模型和BookController我尝试:
Paragraph
... CakePHP会告诉我Page
与class Book extends AppModel {
public $hasMany = array(
'Page' => array(
// ...
)
);
}
模型无关。
如果我通过定义模型属性创建关系一切顺利:
__construct()
这是为什么?我需要手动建立这些关系吗?我的时间安排({{1}})是否正确,是否应该在其他地方完成?
亲切的问候, 巴特
答案 0 :(得分:0)
是的,你的时间不正确。您应该在调用父构造函数之前应用这些配置选项:
if (Configure::read('prefix') == 'admin') {
// ...
}
parent::__construct($id, $table, $ds);
或使用Model::bindModel()
而不是创建必要的链接:
$this->bindModel(
array('hasMany' => array(
'Page' => array(
// ...
'conditions' => array( /* ... */ )
)
)),
false
);
另见http://book.cakephp.org/...html#creating-and-destroying-associations-on-the-fly