如何在 Kohana 3 ORM 关系中指定两个键

Posted

技术标签:

【中文标题】如何在 Kohana 3 ORM 关系中指定两个键【英文标题】:How to specify both keys in Kohana 3 ORM relationships 【发布时间】:2011-11-17 17:30:46 【问题描述】:

我有一个“答案”表和一个“用户”表。我需要链接它们,但我必须在两个表上都使用自定义键(即我没有在其中任何一个表中使用“id”)。两个表都有连接它们的“facebook_id”字段。

在 Answer 模型中,我定义了一个“belongs_to”用户,我可以定义 Answer 的 foreign_key,但我怎么能说“在两个表上使用 facebook_id 将 Answer 链接到用户”?

【问题讨论】:

【参考方案1】:

似乎唯一可行的方法是将您的模型 _primary_key 更改为 facebook_id

在调查 ORM 类结构后,您会看到表是这样连接的

    elseif (isset($this->_belongs_to[$column]))
    
        $this->_load();

        $model = $this->_related($column);

        // Use this model's column and foreign model's primary key
        $col = $model->_table_name.'.'.$model->_primary_key;
        $val = $this->_object[$this->_belongs_to[$column]['foreign_key']];

        $model->where($col, '=', $val)->find();

        return $model;
    

正如你提到的,你可以使用

protected $_belongs_to = array('user' => array('foreign_key' => 'facebook_id')

但这会导致

answers.id = users.facebook_id

但是如果你像这样将答案的主键从 id 更改为 facebook_id

protected $_primary_key = 'facebook_id';

那么最终的查询当然会导致

answers.facebook_id = users.facebook_id

【讨论】:

以上是关于如何在 Kohana 3 ORM 关系中指定两个键的主要内容,如果未能解决你的问题,请参考以下文章

Kohana 3 ORM:如何使用 2 个多对多关系执行查询

Kohana 2 ORM 自定义主键生成错误

Kohana 2.3.4 ORM - 删除数据透视表关系

Kohana 3 ORM 关系问题

Kohana3 ORM:加载键/值属性

Kohana-v3 ORM 父关系