Добавить функцию друга в CakePHP - PullRequest
1 голос
/ 06 февраля 2011

Мне нужна простая функция добавления друга в мое приложение, в результате некоторых исследований мне понадобится таблица соединений, ссылающаяся на таблицу пользователей? как то так: (у меня уже есть таблица пользователей)

Пользователи-Дружат-пользователей

Кто-нибудь может дать более подробную информацию об этом?

1 Ответ

3 голосов
/ 06 февраля 2011

Таблица дружбы должна иметь следующие столбцы:

id Integer
user_from (the user who requested friendship)
user_to (the user who accepted friendship)
created (optional to track when your friendship started)

Затем необходимо создать правильное отношение модели.

class User extends AppModel {
   ...
   var $hasMany = array(
      'UserFrom'=>array(
         'className'=>'Friendship',
         'foreignKey'=>'user_from'
      ),
      'UserTo'=>array(
         'className'=>'Friendship',
         'foreignKey'=>'user_to'
      )
   );
   var $hasAndBelongsToMany = array(
      'Friendship' => array(
          'className' => 'User',
          'joinTable' => 'friendships',
          'foreignKey' => 'user_from',
          'associationForeignKey' => 'user_to'
   );
   ...
}

class Friendship extends AppModel {
   ...
   var $belongsTo = array(
      'UserFrom'=>array(
         'className'=>'User',
         'foreignKey'=>'user_from'
      ),
      'UserTo'=>array(
         'className'=>'User',
         'foreignKey'=>'user_to'
      )
   )
   ...
}

Таким образом, вы определяете 2 отношения в каждой модели.Вы также можете добавить отношение HABTM.Запустите скрипт bake для построения ваших контроллеров и представлений.Тогда в вашем коде вы можете использовать что-то вроде этого:

$this->User->UserFrom->find('all', 
    array(
        'conditions'=>array('user_from'=>1), 
        'contain'=>array('UserTo')
    )
);

Это должно вернуть друзей пользователя с идентификатором 1 и всеми данными друзей.

Будьте осторожны с рекурсивными запросами.:)

...