My problem: Users -> habtm -> Teams. Users get invited to teams, when
they accept, they disapear from invitation list and become members.
Obvious design would be habtm table with additional fields like
'membership status' = 'invited'/'member', but i remembered that
additional habtm fields and cake doesn't mix if i try to update one
invitation of some user to particular team all invitations of that
team will be deleted and then reinserted loosing additional fields. So
i ended up with two tables - for members and for invited.
After a lot of headache trying to come up with the elegant code for
deletion one habtm relationship and adding another one for the same
model, i finally i thought i got it with deleteAll, but no...


Firstly i couldn't get ->save method to work if i had following model

team
<..>
var $hasAndBelongsToMany = array(
                        'Userteam' => array('className' => 'User',
                                                                'joinTable' => 
'teamusers',
                                                                'foreignKey' => 
'team_id',
                                                                
'associationForeignKey' => 'user_id',
                                                                'unique' => 
true,
                                                                'conditions' => 
'',
                                                                'fields' => '',
                                                                'order' => '',
                                                                'limit' => '',
                                                                'offset' => '',
                                                                'finderQuery' 
=> '',
                                                                'deleteQuery' 
=> '',
                                                                'insertQuery' 
=> ''
                        ),
                        'UserteamInvites' => array('className' => 'User',
                                                                'joinTable' => 
'teamusersinvites',
                                                                'foreignKey' => 
'team_id',
                                                                
'associationForeignKey' => 'user_id',
                                                                'unique' => 
true,
                                                                'conditions' => 
'',
                                                                'fields' => '',
                                                                'order' => '',
                                                                'limit' => '',
                                                                'offset' => '',
                                                                'finderQuery' 
=> '',
                                                                'deleteQuery' 
=> '',
                                                                'insertQuery' 
=> ''
                        )
        );

and before save i had part of an array that looked like this

$data['Team']['id'] = 15
<..>
$data['UserteamInvites']['UserteamInvites'][0] = 1
<..>
$data['Userteam']['Userteam'][0] = 2
$data['Userteam']['Userteam'][1] = 13

After save my db would look like
Userteam table:
Team User
15 1

UserteamInvites table:
Team User
15 2
15 13
15 1 <-- ?
15 13 <- ?

I solved this by unset($data['Userteam']) first, saving $data, then
restoring $data['Userteam'] and unset($data['UserteamInvites']) then
saving for the second time...

That looked ugly, so i thought i'd create a separate model just for
habtm table and use deletAll and create, save. But i was suprised
again as i did deleteAll(array('team_id'=>'15','user_id'=>'13')); ALL
the records with team_id got deleted... I came to square one and had
to admit that cake didn't have a solution for this common scenario, i
was left with -query-.



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" 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