2013-06-20 59 views
0

在我的實體模型中,我有一個User,它通過EnrollmentOrganization連接。Symfony2表格嵌入深度關係的形式

User一一對應的關係EnrollmentEnrollmentOrganization

Enrollment一個多對一的關係有一個屬性批准

當用戶註冊,我想在下拉選項列表中有一個組織名稱列表。 如果User註冊了一個Enrollment對象,則該對象會將UserOrganization連接起來。

既然在UserOrganization之間沒有直接聯繫,那麼在Symfony2表格中看起來是不可能的。

關於如何在表單中嵌入深層關係的任何想法?如果有直接鏈接,我通常只使用表單構建器並添加一個實體,但現在沒有直接鏈接。

回答

0

如果你可以肯定,一個用戶有每次的報名,你可以做這樣的事情:

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