【问题标题】:Kohana ORM, extending and parent methodsKohana ORM,扩展和父方法
【发布时间】:2011-05-27 10:12:16
【问题描述】:

我只是 Kohana ORM 的新手,所以我的问题对于专业人士来说可能有点傻,但是.. :)

我有一些 ORM 模型,它们都有一些相同的方法,例如:

public function items_order_by_id($reverse = false)
{
   if($reverse) return $this->order_by($this->_primary_key, 'desc')->find_all();

   else return $this->order_by($this->_primary_key, 'asc')->find_all(); 
}

public function get_form()
{
    $result = array();

    foreach($this->_table_columns as $key => $value)
    {
        if($value['form']) $result[$key] = $this->_prefix.'_'.$key;
    }

    return $result;
}

如果我要添加一个新模型,我必须复制所有类似的方法,如果我想修改任何方法,我必须修改所有文件。我知道对象编程具有继承性,但是当我尝试扩展 Kohana_ORM 时出现异常,例如:

comment_id 属性在 Model_Comment 类中不存在

所有其他属性也不存在。

是否有可能拥有一个包含这些方法的父模型?

【问题讨论】:

    标签: php orm object model kohana


    【解决方案1】:

    是的,这是可能的。您只需确保编写函数,以便所有其他将要扩展它的模型都可以使用它们。

    您很可能正在为正在运行的模型设置不存在的变量。这就是它抛出错误的原因。

    这也有点离题,但您应该看看 AutoModeler。如果你想要一个灵活的模型系统。 https://github.com/zombor/Auto-Modeler

    它的功能与 ORM 大致相同,但扩展起来更容易。

    【讨论】:

    • 不完全...我确定变量存在。当我的模型中有这些方法时,一切正常。我尝试了两种方法:1)在应用程序/类中,我创建了文件 orm.php,在里面我有类 ORM 扩展了 Kohana_ORM,像受保护的 $_prefix 这样的简单变量效果很好,2)在应用程序/类/模型中,我创建了扩展 ORM 的类和所有其他扩展这些类。但问题是一样的。在所有儿童模型中,我都有数组 - 受保护的 $_table_columns。 =
    • 在 kohana 论坛上发布完整代码的最佳方式。因为如果不看全貌就很难猜出哪里出了问题。
    【解决方案2】:

    哦,这绝对是愚蠢的。 我刚刚重写了 _construct 函数并忘记了 parent::_construct()。

    所以问题解决了,现在一切正常。

    对不起:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多