CakePHP .find返回多个HABTM关系

时间:2014-06-19 16:53:09

标签: cakephp

我有一个模型调用播放列表。 播放列表有一个带跟踪的HABTM

public $hasAndBelongsToMany = array(
    'Track' => array(
        'className' => 'Track',
        'joinTable' => 'tracklists_tracks',
        'foreignKey' => 'tracklist_id',
        'associationForeignKey' => 'track_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => array('id','title','version'),
        'order' => 'TracklistsTrack.timing'
    )
);

Track有一个带AppUser的HABTM

public $hasAndBelongsToMany = array(
    'Artist' => array(
        'className' => 'AppUser',
        'joinTable' => 'artists_tracks',
        'foreignKey' => 'track_id',
        'associationForeignKey' => 'artist_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => array('id','username') 
    )
);

现在,我想,当我写这个

$ tracklist = $ this-> Tracklist-> findById($ id);

为每个曲目列表获取所有曲目(这确实可以正常工作),并为每个曲目获取所有AppUsers(级联)。

请注意,如果我写$ this-> Track-> findById($ id); 我实际上可以获得与赛道相关的AppUsers

由于我勤奋的命名惯例,有没有想过这个开箱即用?

谢谢

1 个答案:

答案 0 :(得分:0)

如果您在模型中定义了正确的关系,我建议使用CakePHP可包含的行为。

http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

您需要做的就是在模型中包含行为并将以下内容放入控制器

$this->TrackList->contain(array('AppUser','Artist'));