CakePHP:如何包含所有顶级关联

CakePHP:如何包含所有顶级关联,php,mysql,sql,cakephp,cakephp-2.0,Php,Mysql,Sql,Cakephp,Cakephp 2.0,我想设置$options['contain'],以便包括所有顶级关联模型(但不包括二级关联)。我知道我可以简单地列出每一个模型 $this->Object->find('all', array('contain'=>array('Model1', 'Model2', ... 但这不是我想要的,因为将来可能会关联其他模型,我希望它们自动包含在内 我想我记得CakePHP的旧版本允许类似 $this->Object->find('all', array('contai

我想设置$options['contain'],以便包括所有顶级关联模型(但不包括二级关联)。我知道我可以简单地列出每一个模型

$this->Object->find('all', array('contain'=>array('Model1', 'Model2', ...
但这不是我想要的,因为将来可能会关联其他模型,我希望它们自动包含在内

我想我记得CakePHP的旧版本允许类似

$this->Object->find('all', array('contain'=>array('*')
但到目前为止(在v2.4上),它似乎不起作用


在重读之后,听起来我想要的东西应该在默认情况下发生。但事实并非如此。

您要查找的是模型属性
recursive

将其设置为level
0
将拉动一级关联

Containable适用于您希望指定哪些模型的情况,并且几乎总是建议您不要使用递归,但是-在您的情况下,拉取“所有”顶级关联模型将使用递归方式完成,而根本不需要Containable


Recursive默认设置为
1
,但我在Cake的未来版本中听说,Recursive将消失(很好的摆脱)。大多数人设置
public$recursive=-1以将其默认设置为“关闭”。

谢谢Dave。是否允许“递归”作为find的$options数组中的键?你知道如果它被设置在上游的其他地方,它是否会胜过
“contain”
?根据,你可以在每次查找的基础上设置递归。但是,当使用可包含行为时,您应该将recursive设置为-1。我尝试了一下,它成功了!然而,HABTM关系也包括它们的“连接关联”,即使“递归”设置为1。这是预期的吗?我认为您实际上可能想要“0”,而不是“1”。这里的细节:(建议根本不要使用递归——在我看来这是一种糟糕的做法——而是坚持使用Containable。我知道你不会这么做,但我不得不说:)更具体一些。。。如果我在搜索用户对象和用户HABTM标记,我会在标记数组中看到一个TagsUser键,用于返回数据。它可能没问题,因为它没有为该标记列出任何其他标记。只是那个对象的关系。