Re: HABTM can't save manually
You have to populate the related models Id in your array, as it is
explained in the CakePHP book at:
http://book.cakephp.org/view/1034/Saving-Related-Model-Data-HABTM
So for each Tag record, add the related Artist record with just the
primary key of the Artist record.
Enjoy,
John
On Aug 5, 2:29 pm, mr_robot <black.miy...@gmail.com> wrote:
> hi there
> been pulling my hair out on this one for 2 days.
> i have two simple models.
> artist and tags.
>
> and i have a artists_tags database table with artist_id and tag_id.
>
> artist model....
> class Artist extends AppModel {
>
> var $name = 'Artist';
> var $hasAndBelongsToMany = array(
> // 'Tag',
> 'Tag' => array(
> 'className' => 'Tag',
> 'joinTable' => 'artists_tags',
> 'foreignKey' => 'artist_id',
> 'associationForeignKey' => 'tag_id',
> 'unique' => true
> )
>
> }
>
> tags model:
> class Tag extends AppModel {
>
> var $name = 'Tag';
> var $hasAndBelongsToMany = 'Artist';
>
> }
>
> i can read back values fine. which tells me my associations are
> working correctly.
>
> if i do a print_r($artist) i get:
>
> Array
> (
> [0] => Array
> (
> [id] => 793
> [name] => ebm
> [link] =>http://www.bob.com/tag/ebm
> [source] => 91
> [rank] =>
> [ArtistsTag] => Array
> (
> [id] => 20
> [artist_id] => 134426
> [tag_id] => 793
> )
>
> )
>
> )
>
> the problem lies in writing the data. i am not using a form, but
> wanting to add data programatically. i fetch a whole lot of data from
> an API then process and insert. this method is working fine for all my
> HAS_MANY associations.
>
> so just trying to manually insert data here fails. it inserts the data
> into the tag model, but never populated the artist_tags table.
>
> if i try something like this:
> $artist = $this->Artist->findById(123456);
> $artist['Tag'][1]['name'] = "rock5";
> $artist['Tag'][1]['link'] = "http://www.last.fm/tag/ebm";
> $artist['Tag'][1]['artist_id'] = 184287;
> $artist['Tag'][1]['source'] = "Last.fm";
> $artist['Tag'][1]['rank'] = 91;
>
> $this->Artist->Tag->save($artist['Tag'], false);
> or any other variations of save. no luck.
> // none of these work:
> //$this->Artist->Tag->saveAll($artist['Tag']);
> // $this->Tag->save($artist['Tag']);
>
> the sql trace is as follows:
> 45 INSERT INTO `tags` (`name`, `link`, `source`, `rank`) VALUES
> ('rock5', 'http://www.last.fm/tag/ebm', 'Last.fm', 91)
> 46 SELECT LAST_INSERT_ID() AS insertID
> 47 COMMIT
> 48 SELECT COUNT(*) AS `count` FROM `tags` AS `Tag` WHERE `Tag`.`id` =
> 842
> 49 START TRANSACTION
>
> any ideas, help or pointers would be much appreciated.
--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.
To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home