3

当我尝试:

// Removed the limit to ensure that all of the group notes items can be found and collapsed
$recent_notes = $this->User->Note->find('all', array(
    'recursive' => 2,
    'order' => 'Note.created DESC',
    'conditions' => $conditions,
    'contains' => array(
        'NotesUser', 'Poster', 'Comment' => array('Poster')
    )
));

它不会限制输出 - 我得到每个相关的模型。但是,当我没有指定recursive2时,或者如果我将其指定为1,我就错过了Comment=>Poster模型。

我怎样才能只得到我需要的模型?谢谢!

4

3 回答 3

8

要仅获取您需要的模型,请使用[Containable behavior]

  • 将递归设置为 -1
  • 使用'contain'单数,而不是'contains'复数,就像你有
  • 确保您在$actsAs模型中设置变量:public $actsAs = array('Containable');

我认识的每个人都$this->recursive = -1;在 AppModel 中设置...这会将所有内容默认为递归 -1,因此您不必再次设置它,除非您想包含更多数据...在这些情况下,我几乎总是使用contain(),而不是$recursive.

于 2012-02-29T19:01:51.080 回答
2

一旦你设置了包含,递归就会被忽略。

从文档:

ContainableBehavior 具有许多选项,可以在将行为附加到模型时进行设置。这些设置允许您微调 Containable 的行为并更轻松地处理其他行为。

recursive (boolean, optional)设置为 true 以允许 containsable 自动确定获取指定模型所需的递归级别,并将模型递归设置为该级别。将其设置为 false 将禁用此功能。默认值是true。

确保数组键设置为“包含”,而不是您在上面发布的“包含”,例如:

$this->Post->find('all', array('contain' => 'Tag'));

我还假设您正在正确加载和附加可包含的行为。如果您遇到问题,文档在此处

于 2012-02-29T19:03:55.783 回答
1

如果您有深度关联,例如 History belongsTo Warehouse 和 Warehouse belongsTo Company 并且您只想要 Warehouse.Company,您也可以使用

'contain'   => array('Warehouse.Company')
于 2013-05-16T12:02:18.170 回答