我正在Kohana框架上构建一个应用程序。对于内容管理,我将使用Joomla框架,因此我们的撰稿人可以轻松地在他们熟悉的UI中添加和编辑内容。
我已经定义了文章可以属于的几个类别。例如。博客(catid = 1
)和产品(catid = 2
)。使用joomla内容表中的xreference
列,用户必须将文章分配给所选类别中的特定ID(因为Model_Blog
可以包含id = 1
,以及{{1} }))。
所以Joomla中的每篇文章都包含Model_Product
和catid
的独特组合。现在我想将这种一对一的关系绑定到我的Kohana ORM模型(例如xreference
),但标准的Kohana ORM Model_Blog
属性仅支持由一列而不是多个AFAIK组成的外键。
我尝试了以下操作,当然,这不起作用:
$_has_one
有人可以告诉我如何正确绑定这种关系吗?
答案 0 :(得分:3)
在源代码中查找之后,我发现Kohana ORM不支持我描述的功能,我不得不扩展ORM模块(这是因为Kohana的本质,一块蛋糕:)),实现多列FK。
class ORM_Modified extends ORM {
public function __get($column) {
if (isset($this->_has_one[$column])) {
$model = $this->_related($column);
$pk = $this->pk();
// Use this model's primary key value (if no value set) and foreign model's column(s)
if(!is_array($this->_has_one[$column]['foreign_key'])) {
$col = ;
$model->where($model->_object_name.'.'.$this->_has_one[$column]['foreign_key'], '=', $pk);
} else {
foreach($this->_has_one[$column]['foreign_key'] as $col => $value) {
$model->where($model->_object_name.'.'.$col, '=', $value == null ? $pk : $value);
}
}
$model->find();
return $this->_related[$column] = $model;
} else {
return parent::__get($column);
}
}
}
现在我可以使用以下语法定义一个列数组,这些列在关系中形成外键:
protected $_has_one = array(
'content' => array('model' => 'cms_content', 'foreign_key' => array('xreference' => null, 'catid' => '1'))
);
请注意,我的解决方案仅适用于1对1的关系,因为在我的情况下,没有必要为1对1实现它,尽管我怀疑这需要类似的修改