Bonjour,
Je suis entraine de développer une section de Musique et je suis rendu à faire afficher la liste de lecture qui est associer à mon album. Quand je fait un debug($album) de ma fonction playlist(); de mom controller Albums :
public function playlist($album_id){
$this->layout = 'musicapp';
$album = $this->Album->Sound->find('all',array(
'conditions' => array('Sound.album_id'=>$album_id),
'recursive' => 0
));
debug($album);
$this->set('album');
}
il m'affiche ceci :
array(
(int) 0 => array(
'Sound' => array(
'id' => '2',
'album_id' => '2',
'name' => 'teste',
'file' => 'sss',
'created' => '2013-09-22 20:52:20',
'backgroundcolor' => ''
),
'Album' => array(
'id' => '2',
'name' => 'Teste 2',
'description' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
'style' => 'Dance',
'created' => '2013-09-22 20:31:19',
'media_id' => '0'
)
),
(int) 1 => array(
'Sound' => array(
'id' => '5',
'album_id' => '2',
'name' => 'Tetse',
'file' => 'dsds',
'created' => '2013-09-23 19:01:46',
'backgroundcolor' => '#000'
),
'Album' => array(
'id' => '2',
'name' => 'Teste 2',
'description' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
'style' => 'Dance',
'created' => '2013-09-22 20:31:19',
'media_id' => '0'
)
)
)
Je pense que quand je vais supprimer un album je veux qui surprime toute les tunes associer à cette album.
Je ne sais pas si l'index Album devrais être avant l'index Sound.
J'ai fait une association dans mon model Album du type hasMany et j'ai mis la variable dependent = true
public $hasMany = array(
'Sound' => array(
'className' => 'Sound',
'foreignKey' => 'album_id',
'dependent' => true
)
);
dans mon model Sound un type belongsTo
public $belongsTo = array(
'Album' => array(
'className' => 'Album',
'foreignKey' => 'album_id',
)
);
En fait j'ai pris la console de Cake Php pour faire les associations entre ces deux model.
Quand tu fera ta suppression d'album, Cake supprimera d'abord les enregistrements associés avant de supprimer le parent.
En revanche, tas requête pour album n'est pas bonne, tu as une duplication de données inutiles puisque à chaque fois tu récupère le son ET l'album.
Essaye plutôt ça :
$album = $this->Album->find('first', array(
'conditions' => array('Album.id' => $album_id),
'contain' => array('Sound')));
Pense à mettre un comportement Containable sur ton model Album et le recusive à -1
C'est au niveau de la base de donnée, tu met on delete cascade ;) ca le fera automatiquement.