gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:02:42 25 4
gpt4 key购买 nike

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

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

因此,Joomla 中的每篇文章都由 catid 的独特组合组成。和 xreference .现在我想将这种一对一的关系绑定(bind)到我的 Kohana ORM 模型(例如 Model_Blog ),但是标准的 Kohana ORM $_has_one property 仅支持由一列而不是多个 AFAIK 组成的外键。

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

protected $_has_one = array(
'content' => array('model' => 'cms_content', 'foreign_key' => 'xreference', 'catid' => '1')
);

谁能告诉我如何正确绑定(bind)这种关系?

最佳答案

在源代码中查找后,我发现 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'))
);

请注意,我的解决方案仅适用于一对一关系,因为在我的情况下,不需要为一对多实现它,尽管我怀疑这需要类似的修改

关于php - Kohana 3.2 ORM 定义由两列组成的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8769188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com