2009-10-16 8 views
0

Existe-t-il un raccourci pour créer des associations Unary dans Cake?Comment créer une association Unary dans CakePhp?

Par exemple, un utilisateur est un ami d'un autre utilisateur. Je suis à peu près sûr que ça va aller à l'encontre des conventions du gâteau si je l'essaye à la dure et que je code les associations moi-même.

gâteau a HABTM:

var $hasAndBelongsToMany = array(
    'User' => 
     array(
      'className' => 'User', 
      'joinTable' => 'friends', 
      'foreignKey' => 'user_id', 
      'associationForeignKey' => 'friend_id', 
      'unique' => true 
     ) 
); 

Est-ce que ce travail? Un modèle d'utilisateur associé à un autre modèle d'utilisateur.

Mise à jour: Comment enregistrer les données maintenant?

$this->data["Friend"] = $request["Requester"]; 
$this->data["Admirer"] = $request["Requestee"];       
$this->Friend->create(); 
$this->Friend->save($this->data); 

$ request [ "demandeur"] et demande de $ [ "REQUESTEE"] à la fois tenir des objets de type utilisateur. Le HABTM rel est défini dans le modèle utilisateur

var $hasAndBelongsToMany = array(
     'Friend' => array(
      'className' => 'Friend', 
      'joinTable' => 'friends', 
      'foreignKey' => 'user_id', 
      'associationForeignKey' => 'id' 
     ), 
     'Admirer'=>array(
      'className'=>'Friend', 
      'joinTable'=>'friends', 
      'foreignKey' => 'friend_id', 
      'associationForeignKey' => 'id',    
     ) 
    ); 

Tout ce qui arrive est que les données de $ -> [ « ami »] de 'id est stocké dans la colonne id de la table d'amis

Répondre

0

En CakePHP Il existe plusieurs variables dans votre modèle, comme $ hasMany, $ belongsTo et $ hasAndBelongsToMany. Veuillez lire le livre de recettes pour plus d'explications .. http://book.cakephp.org/view/78/Associations-Linking-Models-Together.

Dans votre exemple, je pense que vous avez besoin de HABTM.

+0

Il est pas vraiment utile que l'envoyer à lire tous les modèles. Il a évidemment déjà fait. –

1

Bjorn,

il demande à propos HABTM utilisateur ...

votre table de jointure doit être users_users et la relation devrait ressembler à ceci

var $hasAndBelongsToMany = array(
     'Friend' => 
       array(
         'className' => 'UserUser', 
         'joinTable' => 'users_users', 
         'foreignKey' => 'user_id', 
         'associationForeignKey' => 'friend_id', 
         'unique' => true 
       ) 
); 

je pense que cela devrait faire la truc

+0

et «ami» a un modèle et un contrôleur séparés que l'utilisateur? –

+1

La table de jointure ne doit pas * avoir * pour être appelée users_users, mais si vous voulez utiliser automagic de Cake, elle devrait l'être. –

+0

En outre, la valeur className doit être simplement "User" si c'est le nom de votre modèle. Vous pouvez définir une table de jointure si vous le souhaitez via: 'with' => 'UsersUser', mais cela n'est nécessaire que s'il y a des données HABTM supplémentaires sur la table de jointure. –

3

Voici une solution que j'utilise dans un exemple d'application

Deux tables sont nécessaires, les utilisateurs et les abonnés. Les champs importants sont User-> id, Follower-> user_id, Follower-> friend_id.

J'espère que cet extrait aide.

 
<?php 
class User extends AppModel { 
    public $useTable='users'; 
    public $hasAndBelongsToMany=array(
     'Friend'=>array(
      'className'=>'User', 
      'joinTable'=>'followers', 
      'foreignKey' => 'user_id', 
      'associationForeignKey' => 'friend_id', 
      ), 
     'Admirer'=>array(
      'className'=>'User', 
      'joinTable'=>'followers', 
      'associationForeignKey' => 'friend_id', 
      'foreignKey' => 'user_id', 
      ), 
     ); 
} 

-teh

+1

Pour correspondre au format de nom de modèle singulier, je recommanderais d'utiliser 'Friend' au lieu de 'Friends', et 'Admirer' au lieu de 'Admirers'. A part ça, c'est une bonne approche. –

Questions connexes