cakephp - 粉丝关系

时间:2010-11-30 15:31:14

标签: cakephp

我正在尝试创建用户连接关系:

  1. 关注(人们关注)。
  2. 粉丝(关注我的人)。
  3. 我的问题:

    这是一种自我关系?我该如何定义?

    提前致谢。

2 个答案:

答案 0 :(得分:2)

未经测试,但这样的事情应该有效:

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 :(得分:1)

您正在寻找的是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;

您可以创建一个扩展UsersController的FollowersController,然后在follower模型中进一步定义关系。所以你实际上有一个模型可以参考。

我希望这会有所帮助。