CakePHP - 尝试在find('all')中包含相关的模型数据

时间:2011-10-18 16:01:44

标签: cakephp

所以我从我的一个模型中找到了一些数据:

// Models

class SubjectChange extends AppModel {

    public $belongsTo = array('Subject', 'User');

}

class Subject extends AppModel {

    public $hasMany = array('SubjectChange');

    public $belongsTo = array('SubjectGroup');

}


// Controller code to get all SubjectChanges

$subjectChanges = ClassRegistry::init('SubjectChange')->find('all', array(
    'contain' => array(
        'Subject.name',
        'User.full_name'
    )
));

这会让我像这样返回每个SubjectChange,这很棒:

Array
(
    [SubjectChange] => Array
    (
        [id] => 35,
        [subject_group_id] => 5,
        [timestamp] => '2011-10-18 16:52:24'
    )

    [Subject] => Array
    (
        [name] => 'English'
    )

    [User] => Array
    (
        [full_name] => 'John Smith'
    )

)

但我想使用SubjectChange部分中的subject_group_id添加SubjectGroup的名称。这里要注意的重要一点是,SubjectChange模型与SubjectGroup模型有任何关系,我无法从Subject获取它,因为它可能有当前存储在数据库中的不同subject_group_id。

我只是想在我的查询中进行某种连接以从我拥有的SubjectChange subject_group_id中获取SubjectGroup名称,以将此数据添加到上面:

[SubjectGroup] => Array
    (
        [name] => 'My Group Name'
    )

这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

然后我会做一个完整的答案。

你有3种方法可以做到这一点:

你应该使用的正常和第一个是var hasMany,var BelongsTo等声明的关联......

第二种方法是动态地进行第一种方式

 $this->Leader->bindModel(
        array('hasMany' => array(
                'Principle' => array(
                    'className' => 'Principle',
                     //other attributes
                )
            )
        )
    );

只需使用bindModel函数执行此操作,您可能会看到更多in the book

第三种方法是在查找中强制加入,为此您可能会看more in the book here

也许有更多的选择,但我现在不记得了。无论如何这是足够容易的:)

希望它可以帮到你