2016-03-12 46 views
2

我在Symfony表單中遇到了一些問題。在Symfony2表格中將過濾的實體列表分配給實體字段

這是我的代碼:

class ProfileFormType extends AbstractType 
    { 
    /** 
     * @param FormBuilderInterface $builder 
     * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array  $options) 
{ 

    $builder->add('adress',null,array('label' => 'form.adress', 'translation_domain' => 'FOSUserBundle')) 

     ->add('niveau','entity',array(
       'class'=>'EnsajAdministrationBundle:Niveau', 
       'property'=>'libelle' 
      ,'multiple'=>false) 
     ) 

的問題是,通常它返回命名實體的所有行,但我想從「niveau」只返回2個第一行(「水平」)表,用作我的表單的選項。

這個問題的解決方案是什麼?

回答

2

你有(至少)幾個選擇,但明顯的是一個QueryBuilder的供應,以提供所需的行場(見Symfony docs on EntityType Field

例如

//Create function which accepts EntityRepository and returns required QueryBuilder 
$qbFunction = function(EntityRepository $er) { 
    return $er->createQueryBuilder('n') 
     //->orderBy() //If you need to, to get the correct 2 rows! 
     ->setMaxResults(2); //Just two rows 
}; 

$builder->add('adress',null,array('label' => 'form.adress', 'translation_domain' => 'FOSUserBundle')) 

     ->add('niveau','entity',array(
       'class'=>'EnsajAdministrationBundle:Niveau', 
       'property'=>'libelle' 
      ,'multiple'=>false 
      ,'query_builder' => $qbFunction) //give function to field 
     ) 

如果需要,您可以使查詢更復雜,例如,加入連接