0

私は3つのテーブル構造を持っています...

SONG(id、status)

トラックリスト(id、song_id、artist_id、status)

ARTIST(id、status)

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
    ),
);

トラックリストモデルvar$belongsTo = array(

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

この方法ですが、問題は、Artistテーブルからレコードを検索しようとすると、条件なしですべてのレコードが検索されることです。

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

トラックリストに関連し、tracklist.statusをとして持つアーティストのみを取得したいと思い1ます。関係は正しいですか?または、hasMany with(Song、Artist)とBelongsTo with(Tracklist)を使用します。

4

1 に答える 1

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 ));
于 2012-08-24T20:49:58.287 に答える