2010-11-30 19 views
0

Im essayant de créer une relation de connexions utilisateur:CakePHP - Suiveurs relation

  1. Suite (personnes) im suivantes.
  2. Abonnés (personnes qui me suivent).

Ma question:

Il est une auto-relation? Comment puis-je définir cela?

Merci d'avance.

Répondre

1

Ce que vous cherchez est une relation HABTM. Bien que vous fassiez référence deux fois au même modèle (utilisateur) à la place à deux distincts forment la table de jointure.

-- ----------------------------------------------------- 
-- 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; 

Vous pouvez créer un FollowersController qui étend UsersController et définir ensuite la relation dans le modèle suiveur. Vous auriez donc un modèle auquel vous référer.

J'espère que cela aide.

+0

Eh bien, après avoir revu votre question, il ne s'agirait pas d'une auto-jointure requise. J'ai simplement démontré comment c'est possible. Je vais mettre à jour la réponse dans une minute avec une solution proposée. – serialk

+0

Comment définir la relation dans le modèle suiveur. – josoroma

2

Untested, mais somethinglike cela devrait fonctionner:

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', 
    ) 
); 
} 

Où vous avez votre table d'utilisateurs standard, plus une table d'amis avec user_id et champs friend_id, et une table de disciples avec user_id et champs follower_id.

Questions connexes