Im essayant de créer une relation de connexions utilisateur:CakePHP - Suiveurs relation
- Suite (personnes) im suivantes.
- Abonnés (personnes qui me suivent).
Ma question:
Il est une auto-relation? Comment puis-je définir cela?
Merci d'avance.
Im essayant de créer une relation de connexions utilisateur:CakePHP - Suiveurs relation
Ma question:
Il est une auto-relation? Comment puis-je définir cela?
Merci d'avance.
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.
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.
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
Comment définir la relation dans le modèle suiveur. – josoroma