在我的实体模型中,我有一个User
,通过Enrollment
在Organization
中连接。
User
与Enrollment
呈一对一关系,Enrollment
与Organization
呈多对一关系
Enrollment
有一个属性approved
当用户注册时,我希望在下拉选择列表中有一个组织名称的列表。如果User
注册,则创建Enrollment
对象,连接User
和Organization
。
由于User
和Organization
之间没有直接联系,因此似乎不可能在Symfony2表单中获得它。
如果您可以确定用户每次都有注册,您可以这样做:
$builder->add('organizations', 'entity', array('property_path' => 'enrollment.organizations', ));
或其他解决方案,如果您定义了querybuilder
$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)));
});