Cakephp查找递归关联

时间:2016-04-29 10:55:07

标签: cakephp

我的Cakephp应用程序以下具有关系的模型

if(offset != 21900)
{
 result = obj.search(productNames, offset, limit);
 bugsObj = (Object[])result.get("bugs");
}
else
{
 result = obj.search(productNames, 21900, 63);
 Object[] bugsObj1 = (Object[])result.get("bugs");
 result = obj.search(productNames, 21964, 36);
 Object[] bugsObj2 = (Object[])result.get("bugs");
 bugsObj = new Object[bugsObj1.length+bugsObj2.length];

 for(int i = 0; i < bugsObj1.length + bugsObj2.length; i++)
 {
  bugsObj[i] = i < bugsObj1.length ? bugsObj1[i] : bugsObj2[i - bugsObj1.length];
 }
}

当我找到所有类别元素时,只有产品模型内容即将到来有什么方法可以在我们获取类别模型时获得产品关联(ProductDimension,ProductSwatches等)?

1 个答案:

答案 0 :(得分:0)

默认情况下,CakePHP 2递归级别仅为第1级关联。 您可以使用recursive find选项(或模型属性)来获取深层关联。

有关模型recursive属性的详细信息,请参阅:http://book.cakephp.org/2.0/en/models/model-attributes.html#recursive

例如:

$this->Category->find('all', array(
    'recursive' => 2,
    'conditions' => array(), // Your conditions, etc.
));

另一个(以及更好的方式)正在使用Containable行为。

添加

  

public $ actsAs = array(&#39; Containable&#39;);

到您的模型以启用Containable行为。然后你可以使用:

$this->Category->find('all', array(
    'contain' => array(
        'Product' => array(
            'ProductSwatch',
            'ProductDimension',
            'ProductCare',
            'Review',
        ),
    ),
    'conditions' => array(), // Your conditions, etc.
));

获取更深层次的关联。

有关Containable行为和更深层次关联的详细信息,请参阅http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html#containing-deeper-associations