In addition set recursive to -1. Automagical fechting of related models is well, something for scaffold and testing, nothing for production applications imho. Its slow. See Containable (or contains) as mentioned above, Linkable (on GitHUB) or Complex Find Conditions (with "joins") to fetch deep associations.
King regards Jonas aka ionas82 On Oct 17, 5:56 am, KyleKai <[email protected]> wrote: > Maybe you just needhttp://book.cakephp.org/view/474/Containable.... > > On 10月17日, 上午11時08分, "[email protected]" <[email protected]> > wrote: > > > Ok this is what I have set up: > > > Artist -> hasMany Album > > Album -> belongsTo Artist > > Album -> belongsTo Label > > Album-> hasMany Track > > Label-> hasMany Album > > Track-> belongsTo Album > > > so fa so good.... > > > I provide the name of the Artist and the name of the Album and want to > > get results from each table: > > > $this->Album->find('all', array('conditions' => array('Album.slug'=> > > $thisAlbum, 'Artist.slug'=>$thisArtist), 'fields'=>array('Album.name', > > 'Artist.name', 'Label.name'), 'recursive'=>1)); > > > This the array I get: > > > Array > > ( > > [0] => Array > > ( > > [Album] => Array > > ( > > [name] => The Art Of Breaking > > [id] => 1 > > ) > > > [Artist] => Array > > ( > > [name] => Thousand Foot Krutch > > ) > > > [Label] => Array > > ( > > [name] => Tooth & Nail > > ) > > > [Track] => Array > > ( > > [0] => Array > > ( > > [id] => 1 > > [album_id] => 1 > > [name] => Hand Granade > > [lyrics] => > > [slug] => handgranade > > [created] => 2009-10-16 22:09:19 > > [modified] => 0000-00-00 00:00:00 > > ) > > > [1] => Array > > ( > > [id] => 2 > > [album_id] => 1 > > [name] => Breathe > > [lyrics] => > > [slug] => breathe > > [created] => 2009-10-16 22:55:16 > > [modified] => 0000-00-00 00:00:00 > > ) > > > ) > > > ) > > > ) > > > Which is what I want.. except that I cannot specify what fields I want > > to select in the table Tracks, because it's a separate query. > > > Look at the queries: > > > First: > > > SELECT `Album`.`name`, `Artist`.`name`, `Label`.`name`, `Album`.`id` > > FROM `albums` AS `Album` LEFT JOIN `artists` AS `Artist` ON > > (`Album`.`artist_id` = `Artist`.`id`) LEFT JOIN `labels` AS `Label` ON > > (`Album`.`label_id` = `Label`.`id`) WHERE `Album`.`slug` = > > 'theartofbreaking' AND `Artist`.`slug` = 'thousandfootkrutch' > > > Second: > > SELECT `Track`.`id`, `Track`.`album_id`, `Track`.`name`, > > `Track`.`lyrics`, `Track`.`slug`, `Track`.`created`, > > `Track`.`modified` FROM `tracks` AS `Track` WHERE `Track`.`album_id` = > > (1) > > > Is there a way to tell find() what fields in Track to select? Do I > > have to do another find()? > > The only thing I can think of is to do recursive = 0 and run another > > find() for Track. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~----------~----~----~----~------~----~------~--~---
