代码之家  ›  专栏  ›  技术社区  ›  Michal M

科哈纳ORM关系

  •  1
  • Michal M  · 技术社区  · 15 年前

    我有以下表格:

    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 那些。

    当然两者兼而有之 用户事件 用户摘要 有要连接的外键 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();
    

    始终返回来自的第一个用户 用户 尽管如此,桌子 userevent 具有不同的用户ID。 我想我需要改变一下 Model_userevent 但我会用一些帮助。

    铌。我用的是Kohana 3.0.8。

    1 回复  |  直到 15 年前
        1
  •  1
  •   biakaveron    15 年前

    使用 $user_event->user (没有) find() )模型看起来不错,但您可能应该手动为 usersummaries userevents 关系(对于这些名称,ko3 inflector可能工作错误)