Kohana 3.2 ORM定义由两列组成的外键

时间:2012-01-07 11:06:30

标签: php orm joomla kohana

我正在Kohana框架上构建一个应用程序。对于内容管理,我将使用Joomla框架,因此我们的撰稿人可以轻松地在他们熟悉的UI中添加和编辑内容。

我已经定义了文章可以属于的几个类别。例如。博客(catid = 1)和产品(catid = 2)。使用joomla内容表中的xreference列,用户必须将文章分配给所选类别中的特定ID(因为Model_Blog可以包含id = 1,以及{{1} }))。

所以Joomla中的每篇文章都包含Model_Productcatid的独特组合。现在我想将这种一对一的关系绑定到我的Kohana ORM模型(例如xreference),但标准的Kohana ORM Model_Blog属性仅支持由一列而不是多个AFAIK组成的外键。

我尝试了以下操作,当然,这不起作用:

$_has_one

有人可以告诉我如何正确绑定这种关系吗?

1 个答案:

答案 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实现它,尽管我怀疑这需要类似的修改