当我尝试:
// 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')
)
));
它不会限制输出 - 我得到每个相关的模型。但是,如果我未将recursive
指定为2
,或者我将其指定为1
,则我会错过Comment=>Poster
模型。
我怎样才能获得我需要的模型?谢谢!
答案 0 :(得分:8)
要仅获取所需的模型,请使用[Containable behavior]:
'contain'
单数,非'contains'
复数,就像你有$actsAs
变量:public $actsAs = array('Containable');
我认识的每个人都在AppModel中设置$this->recursive = -1;
...这默认所有内容都是递归-1所以你不必再次设置它,除非你想要包含更多的数据......并且在某些情况下,我几乎总是使用contain()
,而不是$recursive
。
答案 1 :(得分:2)
设置包含后,将忽略递归。
来自文档:
ContainableBehavior有许多可以在何时设置的选项 行为附加到模型。设置允许您罚款 调整Containable的行为并更多地处理其他行为 容易。
recursive (boolean, optional)
设置为true以允许包含 自动确定获取所需的递归级别 指定模型,并将模型递归设置为此级别。 将其设置为false将禁用此功能。默认值为true。
确保数组键设置为“包含”,而不是上面发布的“包含”,如下所示:
$this->Post->find('all', array('contain' => 'Tag'));
我还假设您正在加载并正确附加可包含的行为。如果您遇到问题,则文档为here。
答案 2 :(得分:1)
例如,如果您有深层关联 历史属于仓库和仓库所属公司 而你只想要Warehouse.Company,你也可以使用
'contain' => array('Warehouse.Company')