有没有办法不用Kohana中的子模型覆盖整个属性?

时间:2010-11-10 07:56:16

标签: php orm model kohana kohana-3

我有以下模型链:

Model_Auth_User
Model_Module_User
Model_App_User
Model_User

...其中Model_User是我实际使用的模型,它只是一个虚拟类,而其他都具有功能。

我的问题是在Model_App_User我想在模型中添加一列,比如employee_flag。我需要将其添加到_labels_table_columns以及其他可能的地方。当然,如果我在Model_App_User中添加以下内容:

 protected $_labels = array(
      'employee_flag' => 'Employee Flag',
 );

覆盖整个标签数组。不是我想要的。

我想到的一个选项是添加一个名为_override_properties的属性,我将在初始化时处理该属性并与对象中的属性合并。但这也失败了,因为如果我在Model_Module_User中使用它,它将覆盖我放入Model_App_User的任何内容。

还有哪些其他选择?

2 个答案:

答案 0 :(得分:1)

有两个解决方案。您可以通过在名为labels的方法中定义标签来更改ORM的工作方式。我猜它会是这样的:

public static function labels ()
{
    return array
    (
        'name' => 'First Name'
    );
}

然后在您的子课程中,它将如下:

public static function labels ()
{
    $labels = parent::labels();

    // Add new or modify labels.
    $labels['last'] = 'Last Name';

    return $labels;
}

您需要修改ORM检索标签的方式。如果您没有时间修改ORM的工作方式,那么 Zahymakas 添加到子__construct中的数组的解决方案是一个很好的折衷方案。

答案 1 :(得分:0)

$this->_labels['employee_flag'] = 'Employee Flag';怎么样?