I have my data in this format now (below).  How do I call save/saveall
to update the Campaign, Player and the habtm players_users?

I have tried this:
if ($this->Campaign->save($this->data)) {
      if ($this->Campaign->Player->saveAll($this->data)) {
            $this->flash('Your campaign has been setup.', "/campaigns/
run/$id");
       }
}
This only saves the first player, and does not save any of the habtm
with user.

if ($this->Campaign->save($this->data)) {
      if ($this->Player->saveAll($this->data['Player'])) {
            $this->flash('Your campaign has been setup.', "/campaigns/
run/$id");
       }
}
This saves all the players, but does not save the habtm with user.

Thanks again for the help.


Array
(
    [Campaign] => Array
        (
            [id] => 3
            [baseHeroConquest] =>
            [baseOverlordConquest] =>
        )
    [Player] => Array
        (
            [0] => Array
                (
                    [characterName] =>
                    [playerName] =>
                    [username] => testing
                    [baseExperienceSpent] =>
                    [overlord] => 0
                    [campaign_id] => 3
                )

            [1] => Array
                (
                    [characterName] =>
                    [playerName] =>
                    [username] => testing2
                    [baseExperienceSpent] =>
                    [overlord] => 0
                    [campaign_id] => 3
                )

            [2] => Array
                (
                    [characterName] =>
                    [playerName] =>
                    [username] =>
                    [baseExperienceSpent] =>
                    [overlord] => 0
                    [campaign_id] => 3
                )

            [3] => Array
                (
                    [characterName] =>
                    [playerName] =>
                    [username] =>
                    [baseExperienceSpent] =>
                    [overlord] => 0
                    [campaign_id] => 3
                )

            [5] => Array
                (
                    [characterName] => The Titan
                    [playerName] =>
                    [username] =>
                    [baseExperienceSpent] =>
                    [overlord] => 1
                    [campaign_id] => 3
                )

        )
    [User] => Array
        (
            [0] => Array
                (
                    [id] => 11
                )
            [1] => Array
                (
                    [id] => 12
                )
        )
)


On Feb 25, 1:14 pm, mark_story <[email protected]> wrote:
> saveAll() does work with HABTM.  saveAll() does not however work when
> your data arrays are not formatted the way it likes them.  Which seems
> to be the case here.  You have the User key inside the Player key.
> That is not saveAll()'s preferred diet.  It likes it habtm at the same
> depth as the related model.  Much like save().
>
> -Mark
>
> On Feb 25, 10:20 am, spazard1 <[email protected]> wrote:
>
> > saveAll is supposed to work with HABTM though.  I'm trying to save
> > multiple Player at the same time, all of which should also save an
> > associated User.  I'm thinking I just setup the data array incorrectly
> > or something like that, which is causing it not to save.
>
> > On Feb 25, 4:58 am, luke BAKING barker <[email protected]> wrote:
>
> > > hi
>
> > > use save() not saveAll with HABTM
>
> > > On Feb 25, 7:01 am, spazard1 <[email protected]> wrote:
>
> > > > Hello all.
>
> > > > I am running into a problem where my join tables are not being updated
> > > > when I call saveAll.  I have the latest stable version of cakephp, in
> > > > which this bug was fixed.
>
> > > > Here is the relevant action code:
> > > > //first update the ['Player'] array to replace username with ['User']
> > > > ['id']
> > > >          foreach ($this->data['Player'] as $key => $row) {
> > > >             $this->data['Player'][$key]['campaign_id'] = $id;
> > > >             if ($this->data['Player'][$key]['username'] != "") {
> > > >                $this->data['Player'][$key]['User']['id'] = 
> > > > $this->User->field('id', array('User.username' => 
> > > > $this->data['Player'][$key]
>
> > > > ['username']));
> > > >             }
> > > >          }
> > > >         debug($this->data['Player']);
> > > >          if ($this->Campaign->save($this->data)) {
> > > >             if ($this->Player->saveAll($this->data['Player'])) {
> > > >                $this->flash('Your campaign has been setup.', "/
> > > > campaigns/run/$id");
> > > >             }
> > > >          }
> > > >       }
>
> > > > And the Player data that is in $this->data['Player'] (only showing the
> > > > first)
> > > > [0] => Array
> > > >         (
> > > >             [characterName] =>
> > > >             [playerName] =>
> > > >             [username] => testing
> > > >             [baseExperienceSpent] =>
> > > >             [overlord] => 0
> > > >             [campaign_id] => 3
> > > >             [User] => Array
> > > >                 (
> > > >                     [id] => 11
> > > >                 )
> > > >         )
>
> > > > The way I understand it, this should cause my players_users table to
> > > > have a row inserted into it.  However that is not happening.  When I
> > > > do a find() on Player, it does return to me the associated Users, so
> > > > I'm pretty sure the model associations are setup correctly.
>
> > > > Thanks for any help you can offer.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to