Doctrine 如何在ZF2中扩展字段集

Doctrine 如何在ZF2中扩展字段集,doctrine,zend-framework2,Doctrine,Zend Framework2,Doctrine的类表继承映射策略涉及根据父表中的鉴别器列中的值将父表与多个子表中的一个子表连接起来。例如,父表可能包含列a、b和c;c列中的值为foo或bar。名为“foo”的子表可能包含d、e、f和g列;而名为“bar”的子表可能包含p、q、r和s列。为父项定义一个实体,为每个子项定义一个单独的实体(“foo”和“bar”)。在继承映射策略中,子实体“扩展”父实体,因此子实体中不需要重新定义父实体中的元素 我的问题是,我们是否也可以“扩展”子字段集?“foo”字段集将由元素a、b、c、d、e

Doctrine的类表继承映射策略涉及根据父表中的鉴别器列中的值将父表与多个子表中的一个子表连接起来。例如,父表可能包含列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”中的定义相同。

简而言之,答案是

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'));
   }
}

这个答案清楚而完整地回答了我提出的问题。然而,我一直无法使它的工作,由于一些细节的学说水合器。我已经把我那些无关紧要的问题贴在了。