I imagine it should work if you use different join tables for each HABTM 
relationship. Regardless of cakephp this is what I imagine you'd need in 
this situation (imagine what would happen if a user is both a friend and 
an admirer of another user).

        var $hasAndBelongsToMany = array(
                        'Friend' => array('className' => 'User',
                                                'joinTable' => 'friends_users',
                                                'foreignKey' => 'friend_id',
                                                'associationForeignKey' => 
'user_id'
                        ),

                        'Admirer' => array('className' => 'User',
                                                'joinTable' => 'admirers_users',
                                                'foreignKey' => 'admirer_id',
                                                'associationForeignKey' => 
'user_id'
                        )
        );



wallerdm wrote:
> Dear All,
>
> Forgive me if this is covered elsewhere. I'm playing with cakePHP as
> an alternative to Rails and am getting to grips with it by creating a
> really simple social network app.
>
> I've got some nice authentication and user profiles sorted and that's
> all displaying great but now I've come to add the "add as a friend"
> functionality and I'm struggling.
>
> Every user in the "users" table has an "id" and I also have a table
> set up, "users_users", to hold the self referential join. This table
> has a an "id", a "user_id" and a "friend_id".
>
> My user model contains the following...
>
> <?php
> class User extends AppModel {
>
>       var $name = 'User';
>       var $hasOne = 'Profile';
>       var $hasMany = array('Status' => array('order' => 'Status.created
> DESC' ));
>
>       var $hasAndBelongsToMany = array(
>                       'Friend' => array('className' => 'User',
>                                               'joinTable' => 'users_users',
>                                               'foreignKey' => 'user_id',
>                                               'associationForeignKey' => 
> 'friend_id'
>                       ),
>                       'Admirer' => array('className' => 'User',
>                                               'joinTable' => 'users_users',
>                                               'foreignKey' => 'friend_id',
>                                               'associationForeignKey' => 
> 'user_id'
>                       )
>       );
>
> }
> ?>
>
> And my users_controller contains...
>
> <?php
> class UsersController extends AppController {
>
> .....
>       function addfriend($friend_id = null) {
>               $user_id = $this->Session->read('User');
>               $this->data['User']['id'] = $user_id['id'];
>               $this->data['Friend']['id'] = $friend_id;
>               print_r($this->data);
>               if($this->User->saveAll($this->data)){
>                       echo 'saved';
>               }else{
>                       echo 'failed';
>               }
>       }
> .....
>
> }
> ?>
>
> Now I know that I've got the data element wrong for the database save
> because it isn't working and the SQL that's generated when you add a
> friend is incorrect.
>
> If you're logged in as a user with id 1 and want to become friends
> with the user with id 4 (http://localhost/network/users/addfriend/4),
> you get...
>
> data = Array ( [User] => Array ( [id] => 1) [Friend] => Array ( [id]
> => 4 ) )
>
> ...and the SQL from the CakePHP debug panel is...
>
> UPDATE `users` SET `id` = 1 WHERE `users`.`id` = 1
>
> Is anyone able to help me get this whole self-referential-HABTM
> relationship thing sorted?
>
> Thanks in advance.
>
> Dave.
>
> >
>
>   


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
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