CakePHP многомерная модель

1

У меня проблемы с моделями CakePHP.

У меня три таблицы: CC_PLAYLIST, CC_PLAYLISTCONTENTS и CC_FILES.

Я хотел бы получить список всех плейлистов со всем их содержимым, а затем соответствующую информацию о файлах для каждой части содержимого плейлиста.

IE

Playlist 1
-- Playlist Content 1
---- File Info
-- Playlist Content 2
---- File Info
-- Playlist Content 3
---- File Info
Playlist 2
-- Playlist Content 123
---- File Info

В моем контроллере у меня есть: $playlistcontent = $this->AirtimePlaylist->find('all') однако это похоже на то, что появляется плоский массив со всеми playlistcontents, всеми файлами и пустым массивом списков воспроизведения.

Изображение 174551

AirtimeFile.php

class AirtimeFile extends AppModel {

    public $useTable = 'cc_files';

    public $actsAs = array('Containable');
    public $hasMany = array('AirtimeFileAttribute' => array(
        'className' => 'AirtimeFileAttribute',
        'foreignKey' => 'track_id'
    ));

}

AirtimePlaylist.php

class AirtimePlaylist extends AppModel {

    public $useTable = 'cc_playlist';

    public $actsAs = array('Containable');
    public $hasMany = array('AirtimePlaylistContent' => array(
        'className' => 'AirtimePlaylistContent',
        'foreignKey' => 'playlist_id'
    ));

}

AirtimePlaylistContent.php

class AirtimePlaylistContent extends AppModel {

    public $useTable = 'cc_playlistcontents';

    public $actsAs = array('Containable');
    public $hasOne = array('AirtimePlaylist' => array(
        'className' => 'AirtimePlaylist',
        'foreignKey' => 'id'
    ),'AirtimeFile' => array(
        'className' => 'AirtimeFile',
        'foreignKey' => 'id'
    ));

}
Теги:
cakephp
model

1 ответ

1
Лучший ответ

В контроллере вы должны использовать contain

$model = $this->AirtimePlaylist->find('all',
    array(
        'contain' => array('AirtimePlaylistContent' => array('AirtimeFile') )
    )
);
  • 0
    Пятно на - Спасибо за это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню