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 [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
-~----------~----~----~----~------~----~------~--~---