CakePHP包含不使用递归

CakePHP包含不使用递归,cakephp,model,cakephp-1.2,containable,Cakephp,Model,Cakephp 1.2,Containable,当我尝试时: // 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' => $

当我尝试时:

// 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')
    )
));
它不限制任何输出-我得到每一个相关的模型。但是,如果我没有将
递归
指定为
2
,或者我将其指定为
1
,则缺少
注释=>海报
模型


我怎样才能只买到我需要的型号?谢谢

要仅获取所需的模型,请使用:

  • 将recursive设置为-1
  • 使用
    'contain'
    单数,而不是像您所使用的那样使用
    'contains'
    复数
  • 确保您正在模型中设置
    $actsAs
    变量:
    public$actsAs=array('Containable')

我认识的每个人都设置
$this->recursive=-1在AppModel中。。。这将所有内容默认为recursive-1,因此您不必再次设置它,除非您希望包含更多数据……在这种情况下,我几乎总是使用
contain()
,而不是
$recursive
,一旦设置contain,就会忽略recursive

从文档中:

ContaineableBehavior有许多选项,可以在 该行为将附着到模型。这些设置允许您进行微调 调整Containable的行为,并更多地使用其他行为 很容易

递归(布尔,可选)
设置为true以允许可包含 自动确定获取所需的递归性级别 指定模型,并将模型递归性设置为此级别。 将其设置为false将禁用此功能。默认值为true

确保数组键设置为“contain”,而不是如上面所述的“contains”,如下所示:

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

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

例如,如果您有深层次的关联 历史属于仓库,仓库属于公司 你只需要仓库。公司,你也可以使用

'contain'   => array('Warehouse.Company')

再次感谢你,戴夫。对你来说不幸的是,斯维茨基在答案上击败了你,但是你要知道,如果我能把你们两个都标记为正确的话,我会:)我们两个在同一时间发布:)以前发生过,以后还会发生,不用担心。耶-总是这样。加勒特:建议继续前进-标记最好的答案,而不是第一个答案。它将使StackOverflow社区受益,而不仅仅是标记谁是第一个。我并不是说我的只是对未来的建议。我们参与it不是为了竞争/获得声誉-我们参与it是为了帮助人们!:)谢谢你的建议。在本例中,这只是一个简单的语法错误,你们两人都立即发现了,但我已经并将继续寻找最佳答案。@Garrett这是4年前的事了,但我忍不住注意到Dave“在19:01回答了2012年2月29日”和sweicki“在19:03回答了2012年2月29日”。。。所以戴夫赢了他两分钟。