ORM отношения в Кохане - PullRequest
       21

ORM отношения в Кохане

1 голос
/ 03 ноября 2010

У меня есть следующие таблицы:

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

Таблица user_events хранит все пользовательские события (существует много одинаковых типов в разное время), а user_summaries хранит количество событий каждого типа.произошло с каждым пользователем.Первый получает только INSERT запросов, а последний в основном UPDATE.

Конечно, и user_events, и user_summaries имеют внешние ключи для связи с таблицами users и events.Я хочу представить это отношение в моих моделях в Кохане.У меня есть опыт работы с внешними ключами, но это мой первый подход как к Kohana, так и к ORM, и я не совсем уверен, как определить свои модели для представления этих отношений.

Что я хочу сделать, так это сделатьв основном это:

// 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();

Мои текущие модели выглядят так:

# 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(),
    );
}

В настоящее время вызов:

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

всегда возвращает первого пользователя из таблицы usersдаже если userevent имеет другой user_id.Я предполагаю, что мне нужно что-то изменить в Model_userevent, но я бы использовал с некоторой помощью.

NB.Я использую Kohana 3.0.8.

1 Ответ

1 голос
/ 04 ноября 2010

Используйте $user_event->user (без find()). Модели выглядят хорошо, но, возможно, вам следует вручную определить связанные модели для отношений usersummaries и userevents (инфлектор Ko3 может работать неправильно для этих имен)

...