您可以包含更深层次的关联,就像文档中所说的那样
文档中的示例
$this->User->find('all', array(
'contain' => array(
'Profile',
'Account' => array(
'AccountSummary'
),
'Post' => array(
'PostAttachment' => array(
'fields' => array('id', 'name'),
'PostAttachmentHistory' => array(
'HistoryNotes' => array(
'fields' => array('id', 'note')
)
)
),
'Tag' => array(
'conditions' => array('Tag.name LIKE' => '%happy%')
)
)
)
));
你的模型也一样...
$options = array(
'conditions' => array('Book.' . $this->Book->primaryKey => $id),
'contain' => array('Page' => array('Asset')))
);
$books = $this->Book->find('first', $options);
如果您的关联设置正确(并且如果所有模型都实现了可包含的行为),则应该可以工作。
编辑
(以解决 OP 的困惑)
嵌套的包含选项适用于扩展数组的模型。例如,如果模型是这样关联的
Model-A -> Model-B -> Model-C & Model-D
-> Model-E -> Model-C
您可以使用以下数据获取整个数组
Model-A
Model-B1
Model-C1
Model-C2
Model-D2
Model-B2
Model-C (null)
Model-D3
Model-E1
Model-C1
Model-C3
使用类似的东西
$this->ModelA->find('all'), array(
'contain' => array(
'Model-B' => array('Model-C', 'Model-D'),
'Model-E' => array('Model-C')
)
);
此外,您可以向可包含数组添加选项,包括用于搜索的选项,例如'conditions'
(虽然要小心,这意味着如果模型不匹配条件它将返回一个空数组,这并不意味着整个“Model-A”将不在返回的数据中,因为其中一个嵌套条件未满足)。