2010-11-03 46 views
1

Je les tableaux suivants:relations ORM dans Kohana

users   { id, name } 
events   { id, name } 
user_events  { id, date, user_id, event_id } 
user_summaries { id, user_id, event_id, qty } 

Tableau user_events stocke tous les événements utilisateur (il y a beaucoup des mêmes types à différents moments) et user_summaries magasins combien de chaque type d'événements se sont produits à chaque utilisateur. Le premier ne reçoit que les requêtes INSERT et les secondes UPDATE.

Bien sûr les deux user_events et user_summaries ont des clés étrangères à lier avec les tables users et events. Je veux représenter cette relation dans mes modèles de Kohana. J'ai de l'expérience avec les clés étrangères, mais c'est ma première approche à la fois de Kohana et d'ORM et je ne suis pas vraiment sûr de la façon de définir mes modèles pour représenter ces relations.

Ce que je veux être en mesure de faire est essentiellement ceci:

// I'm able to do this. 
$user = ORM::factory('user', 1); 
$user_events = $user->events->find_all(); 
$user_summaries = $user->usersummaries->find_all(); 

// I'm able to do this, too. 
$event = ORM::factory('event', 1); 
$event_users = $event->users->get_all(); 

// I don't know how to be able to do this: 
$user_event = ORM::factory('userevent', 1); 
$user_details = $user_event->user->find(); 
$event_details = $user_event->event->find(); 

Mes modèles actuels ressemblent à ceci:

# classes/model/user.php 
class Model_User extends ORM 
{ 
    protected $_has_many = array(
     'scores' => array(), 
     'usersummaries' => array(), 
    ); 
} 

# classes/model/event.php 
class Model_Event extends ORM 
{ 
    protected $_has_many = array(
     'scores'  => array(), 
     'usersummaries' => array(), 
    ); 
} 

# classes/model/userevent.php 
class Model_Userevent extends ORM 
{ 
    protected $_belongs_to = array(
     'user' => array(), 
     'event' => array(), 
    ); 
} 

# classes/model/usersummary.php 
class Model_Usersummary extends ORM 
{ 
    protected $_belongs_to = array(
     'user' => array(), 
     'event' => array(), 
    ); 
} 

appeler Actuellement:

$user_event = ORM::factory('userevent', 1); 
$user_details = $user_event->user->find(); 

retourne toujours la premier utilisateur de users tableau, même si userevent a une utilisation différente débarrasser. Je présume que j'ai besoin de changer quelque chose en Model_userevent mais je voudrais utiliser avec de l'aide.

NB. J'utilise Kohana 3.0.8.

+1

Utilisez '$ user_event-> user' (sans' find() '). Les modèles ont l'air bien, mais vous devrez peut-être définir manuellement les modèles associés pour les relations 'usersummaries' et' userevents' (l'inflecteur Ko3 peut ne pas fonctionner correctement pour ces noms) – biakaveron

+0

Pourquoi n'y ai-je pas pensé! Merci, biakveron. Mettez cela comme une réponse pour que je puisse l'accepter. –

Répondre

1

Utilisez $user_event->user (sans find()). Les modèles semblent bien, mais peut-être vous devez définir manuellement les modèles associés pour usersummaries et userevents relations (Ko3 inflector peut ne pas fonctionner correctement pour ces noms)

+0

Merci, biakaveron. –