1

次のテーブルがあります。

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にリンクするための外部キーがあります。この関係をコハナのモデルで表現したいと思います。私は外部キーの経験がありますが、Kohana と ORM の両方に対する最初のアプローチであり、これらの関係を表現するためにモデルを定義する方法が本当にわかりません。usersevents

私ができるようにしたいのは、基本的にこれです:

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

user_id が異なっusersていても、テーブルから常に最初のユーザーを返します。userevent何かを変更する必要Model_usereventがあると思いますが、いくつかの助けを借りて使用します。

注意。Kohana 3.0.8 を使用しています。

4

1 に答える 1

1

$user_event->user(なし)を使用しfind()ます。usersummariesモデルは問題ないように見えますが、とリレーションの関連モデルを手動で定義する必要があるかもしれませんuserevents(これらの名前では Ko3 インフレータが正しく動作しない可能性があります)。

于 2010-11-04T20:07:46.790 に答える