Doctrine的类表继承映射策略涉及根据父表中的discriminator列中的值将父表连接到多个子表中的一个。例如,父表可能包含列a,b和c;列c中的值为foo
或bar
。名为'foo'的子表可能包含列d,e,f和g;而名为“bar”的子表可能包含列p,q,r和s。为父项定义单个实体,并为每个子项定义单独的实体('foo'和'bar')。在继承映射策略中,子实体'扩展'父实体,因此子代中不需要重新定义父实体中的元素。
我的问题是,我们可以'扩展'子场集吗? 'foo'字段集将由元素a,b,c,d,e,f和g组成,'bar'字段集将由元素a,b,c,p,q,r和s组成。我们真的需要多次为元素a,b和c定义选项和属性吗?这样做会增加代码量,并且需要尽力确保a,b和c在每个'foo'和'bar'中的定义相同。
答案 0 :(得分:1)
简短的回答是是,你可以。
class FieldsetParent extends Zend\Form\Fieldset
{
public function init() {
$this->add(array('name' => 'fieldA'));
$this->add(array('name' => 'fieldB'));
$this->add(array('name' => 'fieldC'));
}
}
class FieldsetFoo extends FieldsetParent
{
public function init() {
parent::init();
$this->add(array('name' => 'fieldD'));
$this->add(array('name' => 'fieldE'));
$this->add(array('name' => 'fieldF'));
$this->add(array('name' => 'fieldG'));
}
}
class FieldsetBar extends FieldsetParent
{
public function init() {
parent::init();
$this->add(array('name' => 'fieldP'));
$this->add(array('name' => 'fieldQ'));
$this->add(array('name' => 'fieldR'));
$this->add(array('name' => 'fieldS'));
}
}