Monday, September 29, 2008

Saving self-referential-HABTM relationships...

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 cake-php+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

No comments: