2012-08-24 68 views
0

我有3个表结构...混淆HABTM在CakePHP

(ID,状态)

曲目(ID,song_id,artist_id,状态)

艺术家(编号,状态)

我希望有HABTM,所以我提到了...... 宋模型

var $hasAndBelongsToMany = array(
    'Artist' => array(
     'className' => 'Artist', 
     'joinTable' => 'tracklists', 
     'foreignKey' => 'song_id', 
     'associationForeignKey' => 'artist_id', 
     'conditions' => array('tracklist.status' => '1') 
    'with' => 'Tracklist', 
    //'unique' => true 
    ), 
); 

艺术家型号

var $hasAndBelongsToMany = array(
    'Song' => array(
     'className' => 'Song', 
     'joinTable' => 'tracklists', 
     'foreignKey' => 'artist_id', 
     'associationForeignKey' => 'song_id', 
     'with' => 'Tracklist', 
     //'unique' => true 
    ), 
); 

曲目型号 变量$属于关联=阵列(

'Song' => array(
     'className' => 'Song', 
     'foreignKey' => 'song_id', 
     'dependent' => true 
    ), 
    'Artist' => array(
     'className' => 'Artist', 
     'foreignKey' => 'artist_id', 
     'dependent' => true 
    ) 
); 

这种方式,但问题是,当我试图从艺术家表中找到它的所有查找记录没有任何条件的记录。

$artist_conditions = array('Artist.status' => '1'); 
    $artist_list = $this->Song->Artist->find('list', array('conditions' => $artist_conditions)); 

我想只获取相关的曲目列表,并具有tracklist.status为1那些艺术家。关系是否正确?或者我只是用hasMany(歌曲,艺术家)和属于(曲目列表)。

回答

0

你可以试试这个:

/* for example in songs controller */ 
    public $uses = array('Song','Tracklist'); 
    $artist_conditions = array('Artist.status' => '1'); 
    $this->Tracklist->recursive = 1; 
    $artist_list = $this->Tracklist->find('list', array('conditions' => $artist_conditions)); 
+0

你是不是我的问题的要求明确。请阅读它..我们的代码几乎类似,你只是将递归添加到1.这不是解决方案。 – Tisha

+0

如果您足够关注,您可以看到,解决方案是在曲目列表模型上调用查找功能,而不是Artist模型! 他们是非常不同的,请尝试一下,也许可以帮助你。 –