如何在 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 关系中指定两个键的主要内容,如果未能解决你的问题,请参考以下文章