1

我正在调用与模型 Page(book_id) 关联的名为 Book 的模型上的查找

然而,Page 与一个名为 Asset(page_id) 的模型相关联。我想获得所有三个模型的阵列

Book
    Page1
        Asset1
        Asset2
        Asset3
    Page2
        Asset1
        Asset2
        Asset3

我目前拥有的代码只能让我预订和页面

$options = array(
    'conditions' => array('Book.' . $this->Book->primaryKey => $id),
    'contain' => 'Page'
);
$books = $this->Book->find('first', $options);

书有很多页 页面有很多资产

4

1 回答 1

3

您可以包含更深层次的关联,就像文档中所说的那样

文档中的示例

$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”将不在返回的数据中,因为其中一个嵌套条件未满足)。

于 2014-07-21T20:51:39.350 回答