获取HAMTM关系的hasMany记录

时间:2012-10-18 14:49:51

标签: php cakephp

我有桌子:categories HABTM sculptures有多个images

来自CategoriesController#find()

产生如下数组:

array(
    'Category' => array(
        'id' => '3',
        'name' => 'Modern',
    ),
    'Sculpture' => array(
        (int) 0 => array(
            'id' => '25',
            'name' => 'Ami',
            'material' => 'Bronze',
            'CategoriesSculpture' => array(
                'id' => '18',
                'category_id' => '3',
                'sculpture_id' => '25'
            )
        ),
         (int) 1 => array(
                'id' => '26',
                'name' => 'Charis',
                'material' => 'Bronze',
                'CategoriesSculpture' => array(
                    'id' => '19',
                    'category_id' => '3',
                    'sculpture_id' => '26'
                )
            )
    )
)

如果有可能,我希望能够在阵列中获得与雕塑相关的图像吗?

2 个答案:

答案 0 :(得分:1)

执行此操作的简单方法是在调用find()example)时将递归设置为2。这将告诉find()连接所有关联的模型以及与关联模型关联的模型。

但是,这种方法可能会导致数据集变得非常大,因此更好的方法是在包含更深层关联时使用containable behavior

答案 1 :(得分:0)

使用CakePHP的Containable Behavior。阅读完并遵循说明后,您的查找应如下所示:

$this->Category->find('all', array(
    'contain' => array(
        'Sculpture' => array(
            'Image'
        )
    )
));

在您的类别模型中,您需要:

public $actsAs = array('Containable');
public $recursive = -1; //can set this in many places, but it must be -1 for the Containable find to work.