It depends entirely on whether you want the friendship relation to be
symmetric or not.

Symmetric: If Fred is Joe's friend then Joe is Fred's friend and vice-
versa
Asymmetric: Fred can be Joe's friend regardless of whether or not Joe
is Fred's friend.

An asymmetric relation would be easier to implement:

table: friendships (id, subject_id, object_id) [person `subject_id`
regards person `object_id` as a friend]

class Person extends AppModel {
  var $hasAndBelongsToMany = array(
    'Friend' => array( // People that this person regards as a friend
      'className' => 'Person',
      'with' => 'Friendship',
      'foreignKey' => 'subject_id',
      'associationForeignKey' => 'object_id'
    ),
    'Admirer' => array( // People who regard this person as a friend
      'className' => 'Person',
      'with' => 'Friendship',
      'foreignKey' => 'object_id',
      'associationForeignKey' => 'subject_id'
   )
  );
}

Symmetric relationships would be trickier. As I see it, you'd have to
use a custom query to retrieve/update/delete the data, and always
enforce a constraint that (for example) subject_id < object_id [to
avoid duplicates].

Although perhaps you could act as if it was asymmetric, but
synchronize `friendship` table updates : if you create or delete
{subject_id: 1, object_id: 2} then you must simultaneously create/
delete  {subject_id: 2, object_id: 1}. You'd get data duplication,
sure, but it might make things easier to manage.

Hope this helps - let me know how this progresses, as it's quite an
interesting subject.

On Apr 9, 10:06 am, dizz <[EMAIL PROTECTED]> wrote:
> Hi all,
>
> I'm trying to add a friend feature to one of my sites.
>
> I am trying to wrap my head around how to set up the relationship.
>
> I have a table users which holds all the users info.
>
> Each user can have many friends which is just an alias for many users
> and those friends (users) belong to the User.
>
> This sounds like a HABTM relation, but how would I go about setting it
> using the same model?
>
> Any help would be greatly appreciated.
>
> Thanks,
> -Andrew
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" 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