relations ORM dans Kohana
-
28-09-2019 - |
Question
Je les tableaux suivants:
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 les magasins de user_summaries
combien de chaque type d'événements est survenue lors de chaque utilisateur. L'ancien ne reçoit que des requêtes INSERT
et celle-ci les plus souvent UPDATE
.
Bien sûr, les deux user_events
et user_summaries
ont des clés étrangères établir des liens avec des tables de users
et events
.
Je veux représenter cette relation dans mes modèles dans Kohana. J'ai l'expérience avec les clés étrangères, mais il est ma première approche à la fois Kohana et ORM et je ne suis pas vraiment sûr comment définir mes modèles là pour représenter ces relations.
Ce que je veux être en mesure de le 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(),
);
}
Actuellement appelant:
$user_event = ORM::factory('userevent', 1);
$user_details = $user_event->user->find();
retourne toujours le premier utilisateur de la table de users
, même si userevent
a différents user_id.
Je suppose que je dois changer quelque chose dans Model_userevent
mais j'utiliser avec un peu d'aide.
NB. J'utilise Kohana 3.0.8.
La solution
Utilisez $user_event->user
(sans find()
). Les modèles ont l'air bien, mais peut-être que vous devez définir manuellement les modèles connexes pour les relations usersummaries
et userevents
(KO3 inflector peut fonctionne mal pour ces noms)