将过滤的实体列表分配给Symfony2表单中的Entity字段

时间:2016-03-12 19:44:54

标签: php forms symfony

我的Symfony表单有点问题。

这是我的代码:

  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”(“level”)表中的第2行,以用作我的表单的选项。 / p>

这个问题的解决方案是什么?

1 个答案:

答案 0 :(得分:2)

这里有(至少)两个选项,但显而易见的是提供QueryBuilder到提供所需行的字段(参见Symfony docs on EntityType Field

E.g。

//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
        )

如果需要,您可以使查询更复杂,例如添加联接