relazioni ORM in Kohana
-
28-09-2019 - |
Domanda
Ho le seguenti tabelle:
users { id, name }
events { id, name }
user_events { id, date, user_id, event_id }
user_summaries { id, user_id, event_id, qty }
Tabella memorizza tutti user_events
eventi utente (ci sono molti degli stessi tipi in tempi diversi) e memorizza user_summaries
il numero di ogni tipo di eventi verificato per ciascun utente. L'ex ottiene solo le query INSERT
e questi ultimi in gran parte UPDATE
.
Naturalmente sia user_events
e user_summaries
hanno chiavi esterne Per creare un collegamento con le tabelle users
e events
.
Voglio rappresentare questa relazione nei miei modelli in Kohana. Ho esperienza con le chiavi esterne, ma è il mio primo approccio sia Kohana e ORM e io non sono sicuro veramente come definire i miei modelli lì per rappresentare queste relazioni.
Quello che voglio essere in grado di fare è fondamentalmente questo:
// 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();
I miei modelli attuali simile a questa:
# 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(),
);
}
Al momento chiamando:
$user_event = ORM::factory('userevent', 1);
$user_details = $user_event->user->find();
restituisce sempre il primo utente da tavolo users
, anche se userevent
ha id_utente diverso.
Presumo che ho bisogno di cambiare qualcosa nella Model_userevent
ma mi piacerebbe utilizzare con qualche aiuto.
NB. Sto utilizzando Kohana 3.0.8.
Soluzione
Usa $user_event->user
(senza find()
). I modelli vanno bene, ma può essere è necessario definire manualmente modelli correlati per usersummaries
e userevents
relazioni (KO3 inflettore può funziona male per questi nomi)