0

在我的实体模型中,我有一个User通过.EnrollmentOrganization

User一对一的关系EnrollmentEnrollment一个多对一的关系Organization

Enrollment有一个属性已批准

当用户注册时,我希望在下拉选择列表中有一个组织名称列表。如果User寄存器创建了一个将与Enrollment连接起来的对象。UserOrganization

由于两者之间没有直接联系,User而且Organization似乎不可能在 Symfony2 表单中得到它。

关于如何在表单中嵌入深层关系的任何想法?如果有直接链接,我通常只使用表单构建器并添加一个实体,但现在没有直接链接。

4

1 回答 1

0

如果您可以确定,用户每次注册都可以执行以下操作:

$builder->add('organizations', 'entity', array('property_path' => 'enrollment.organizations', ));

或者其他解决方案可能是,如果您定义一个查询构建器

$builder->add('organisations', 'entity', array(
            'class' => '%ENTITY_NAME%',
            'query_builder' => function (%REPOSITORY_NAME% $repository) {
                return %QUERY%;
            }
        ));

或使用事件监听器

$builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $event) use ($factory) {
    $data = $event->getData();                     
    if ($data->getEnrollment()) {
        $organisations = $data->getEnrollment()->getOrganisations();
    } else {
        $organisations = ...
    }
    $form = $event->getForm();
    $form->add($factory->createNamed('organizations', 'entity', $organisations, array('required' => false)));
});
于 2013-06-20T13:37:50.653 回答