2013-02-09 120 views
0

我有三個實體User,ProviderUserProvider(具有一些額外數據的連接實體)。從表單創建連接實體

我想創建一個表單,用戶通過勾選框(它應該生成一些UserProvider記錄)來指定他們的提供者。

我試過使用選擇並生成新的表單類型,但似乎無法使其正常工作。這是我想的最後一件事:

$form = $this->createFormBuilder($user) 
    ->add('userProviders', 'entity', array(
     'class' => 'MyAppBundle:UserProvider', 
     'property' => 'provider.name' 
     'choices' => $userProviders 
    )) 
    ->getForm(); 

哪裏$userProviders是一些實體我生成當前用戶映射到所有可能提供者的數組,但是這不會工作,因爲單位不堅持(因爲他們可能不需要)。

在Symfony中做到這一點最乾淨的方法是什麼?

回答

0

作爲解決方案,我剛創建了一個未綁定的表單Providers,並將它們與當前的User一起作爲UserProviders持續存在。

這並不理想,因爲重新訪問表單不會顯示現有的連接實體(UserProvider),並且需要額外的工作才能看到這些實體。

1

只需使用實體窗體類的內部方法來生成你的陣列是這樣的:

use Doctrine\ORM\EntityRepository; 
// ... 

$builder->add('userProviders', 'entity', array(
    'class' => 'MyAppBundle:UserProvider', 
    'property' => 'provider.name' 
    'query_builder' => function(EntityRepository $er) { 
     return $er->createQueryBuilder('u') 
      //Your Query here 
     ; 
    }, 
)); 

從這裏摘自:http://symfony.com/doc/master/reference/forms/types/entity.html

你可以做你想做裏面就有一切,甚至2個查詢了可能的NOT IN個案。

+0

謝謝,但是由於目前沒有UserProvider,因此會詢問什麼呢? – 2013-02-09 12:33:39

+0

您想要查詢您希望用戶選擇的提供者。幾乎是你用來在OP中獲得你的'UserProvider'數組的查詢。 – Schwierig 2013-02-10 00:45:21

+0

查詢需要返回一個與''Provider''不同的''UserProvider''集合。 ''UserProvider''是連接實體。 該數組由我製作,循環訪問當前''Provider''對象,並創建''UserProvider''對象以及當前''User''的id,給出可能的選擇。 – 2013-02-11 10:33:23