cakephp - отношения с последователями - PullRequest
0 голосов
/ 30 ноября 2010

Я пытаюсь создать отношение "Пользовательские подключения":

  1. Подписан (люди, которые подписаны).
  2. Подписчики (люди, которые меня подписывают).

Мой вопрос:

Это самоотношения?Как мне это определить?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

Не проверено, но что-то подобное должно работать:

class User extends AppModel {
  var $hasAndBelongsToMany = array(
    'Friend' => array(
      'className' => 'User',
      'joinTable' => 'friends',
      'foreignKey' => 'user_id',
      'associationForeignKey' => 'friend_id',
    ),
    'Follower' => array(
      'className' => 'User',
      'joinTable' => 'followers',
      'foreignKey' => 'user_id',
      'associationForeignKey' => 'follower_id',
    )
  );
}

Где у вас есть стандартная таблица пользователей, плюс таблица друзей с полями user_id и friend_id, а также таблица подписчиков с полями user_id и follower_id.

1 голос
/ 30 ноября 2010

То, что вы ищете, это отношения HABTM.Хотя вы будете дважды ссылаться на одну и ту же модель (пользователя) вместо двух отдельных, образующих объединяющую таблицу.

-- -----------------------------------------------------
-- Table `users`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `users` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `username` VARCHAR(45) NULL ,
  `password` VARCHAR(100) NULL ,
  `email` VARCHAR(100) NULL ,
  `created` DATETIME NULL ,
  `modified` DATETIME NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `followers_users`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `followers_users` (
  `user_id` INT NOT NULL ,
  `follower_id` INT NOT NULL ,
  PRIMARY KEY (`user_id`, `follower_id`) ,
  INDEX `fk_followers_users_users1` (`follower_id` ASC) ,
  CONSTRAINT `fk_followers_users_users`
    FOREIGN KEY (`user_id` )
    REFERENCES `users` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_followers_users_users1`
    FOREIGN KEY (`follower_id` )
    REFERENCES `users` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Вы можете создать FollowersController, который расширяет UsersController, а затем дополнительно определить отношение в последователе.модель.Таким образом, у вас действительно есть модель, к которой можно обратиться.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...