Php 将筛选出的实体列表分配给Symfony2表单中的实体字段

Php 将筛选出的实体列表分配给Symfony2表单中的实体字段,php,forms,symfony,Php,Forms,Symfony,我的Symfony状态有点问题 这是我的代码: class ProfileFormType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) {

我的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”(“级别”)表中的前两行,作为表单的选项

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

这里有(至少)两个选项,但显而易见的一个选项是向提供所需行的字段提供QueryBuilder(请参阅)

例如

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

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