2011-10-18 37 views
0

所以我发现从我的车型之一了一些数据: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得到SubjectGroup名subject_group_id,我有加入的,这个数据添加到上面:

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

这甚至可能吗?

+0

为什么SubjectChange没有任何关联到SubjectGroup?如果你不想永久存在,那么你可以在飞行中做到这一点......但这是做这件事最简单,最正确的方法 – api55

+0

是的,只是想通了。它与它没有真正的联系,但是我刚刚添加了它。我将如何添加到关系中? – BadHorsie

回答

1

我要去做一个完整的答案。

你有3个办法做到这一点:

正常,你应该使用的第一个是协会VAR的hasMany,VAR属于关联等申报...

第二个方法是做在飞行的第一种方式

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

只需使用bindModel功能要做到这一点,你可以看更多的这个in the book

第三方式是做一个强制加入查找,为此,你可以看看more in the book here

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

希望它可以帮助你