我有以下模型链:
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
的任何内容。
还有哪些其他选择?
答案 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';
怎么样?