Thanks Bernardo - that makes sense. I think I might drop the concept of admirers and have an "accepted" state for friendships.
This all works well when displaying user data, a user model automatically has data about previous friendships but I still can't add new friends. The best I can get when I play with the code is a drop of all entries in the "users_users" and in insert of the new friendship. Any ideas or tutorials that might help me out? Dave. On Sep 29, 6:23 pm, Bernardo Vieira <[EMAIL PROTECTED]> wrote: > 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 -~----------~----~----~----~------~----~------~--~---