2011-07-12 3 views
0

J'ai des utilisateurs et des événements, et une table partagée de events_users, et un HABTM entre l'utilisateur/événement défini à cette table de jointure.HABTM fonctionnant uniquement dans un seul sens

schéma utilisateur
id, …, …

schéma événement
id,
user_id {this is the Owner of the event}

events_users schéma
id
user_id
event_id


modèle utilisateur

public $hasAndBelongsToMany = array(
    'Event' => array(
     'className' => 'Event', 
     'joinTable' => 'events_users', 
     'foreignKey' => 'user_id', 
     'associationForeignKey' => 'event_id', 
     'unique' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 
); 

modèle d'événement

var $hasAndBelongsToMany = array(
    … 
    … 

    'SharedUser' => array(
     'className' => 'User', 
     'joinTable' => 'events_users', 
     'foreignKey' => 'event_id', 
     'associationForeignKey' => 'user_id', 
     'unique' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 
); 

Il crée les entrées events_users db bien en utilisant le formulaire d'ajout/édition échafaudé, mais quand j'essaye de le tirer, j'obtiens TOUS les événements au lieu de seulement ceux auxquels ils ont 'accès' à travers la table de jointure. Quand je regarde un événement, il montre automatiquement les utilisateurs associés utilisant cette table de jointure.

Les tentatives visant à tirer des événements un utilisateur « accès » à partir users_controller:

// this throws error of Unknown column 'EventUser.user_id' in 'where clause' (no matter what combination of pluralization or capitalization and underscore, ie EventUser, events_users, Events_Users) 
$events = $this->User->Event->find('all', array('conditions'=> array('EventUser.user_id'=> $id))); 

// this throws error of Undefined property: UsersController::$EventUser 
$events = $this->User->Event->find('all', array('conditions'=> array('UsersEvents.user_id'=> $id))); 

// I would think this just gives the ones they "own", i have a user_id column in Event for the creator of event, but it returns empty 
$events = $this->User->Event->find('all', array('conditions'=> array('user_id'=> $id))); 


// This gives me all events 
$events = $this->User->Event->find('all'); 

Répondre

0
$user = $this->User->find('first', array('conditions' => array('User.id' => $id)); 
debug($user['Event']); 

Peut-être contain que le modèle Event, s'il y a plus de choses attachés au modèle de l'utilisateur que vous ne voulez pas.

+0

arrg, veulent tirer les cheveux. Merci Deceze. Quand j'ai fait ça, j'ai eu False, mais ensuite j'ai lu les docs et je vois que ça veut dire que ça n'a rien trouvé. Puis j'ai finalement fait attention à la valeur de l'ID ... s'avère qu'en utilisant le plugin CakeDC Users, je passais Slug au lieu d'ID à la fonction de vue de Users_controller. J'ai changé la recherche pour faire correspondre slug, puis attrapé le formulaire d'événements qui a retourné l'utilisateur. – mondo

Questions connexes