Doctrine orm Zend\Form\Element\Collection包含来自条令类表继承的元素?

Doctrine orm Zend\Form\Element\Collection包含来自条令类表继承的元素?,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我对将ORM的类表继承(CTI)与ZF2的Zend\Form结合使用有一个疑问。在我们的系统中,每个用户都可以有多个角色,这些角色是通过类表继承方案定义的,因此我们可以定义特定于角色的配置文件字段(即:“年级级别”仅适用于学生帐户)。要构造此属性,有一个帐户实体与帐户\角色有一个OneToMany关联(CTI“基本”类): 但是,如上所述,在设置角色字段时,目标元素(在本例中为字段集)是在集合级别指定的,这意味着集合必须是统一的。对于上述情况,我需要能够为集合的每个元素分别指定target\u元

我对将ORM的类表继承(CTI)与ZF2的
Zend\Form
结合使用有一个疑问。在我们的系统中,每个用户都可以有多个角色,这些角色是通过类表继承方案定义的,因此我们可以定义特定于角色的配置文件字段(即:“年级级别”仅适用于学生帐户)。要构造此属性,有一个
帐户
实体与
帐户\角色
有一个OneToMany关联(CTI“基本”类):

但是,如上所述,在设置
角色
字段时,
目标元素
(在本例中为字段集)是在集合级别指定的,这意味着集合必须是统一的。对于上述情况,我需要能够为集合的每个元素分别指定
target\u元素
,具体取决于它所代表的CTI的哪个成员


关于如何在绑定Account对象时仍然允许自动填充集合元素的方式实现这一点,有什么想法/建议吗?

我已经侵入了一个适用于我的用例的解决方案:构建一个自定义的
非统一集合
非统一元素,并将其传递给一组原型(每个CTI实体一个)并在填充元素时克隆适当的实体

我将代码放在这里的要点中:

一个警告是模板功能不再工作,因为它不知道使用哪个原型

如果有人有任何建议,我仍然愿意看到一个更干净的方法来实现这一点:)

<?php
namespace CdliPortal\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="account")
 */
class Account implements AccountInterface
{
    // Other Fields Omitted

    /**
     * @ORM\OneToMany(targetEntity="CdliPortal\Entity\Account\Role", mappedBy="account", cascade={"ALL"})
     */
    protected $roles;
}
$roles = $user->getRoles();
if ( count($roles) > 0 ) {
    $formAccount->add(array(
        'type' => 'Zend\Form\Element\Collection',
        'name' => 'roles',
        'options' => array(
            'count' => count($roles),
            'target_element' => $this->serviceLocator->get('cdliportal_form_account_role'),
        ),
    ));
}