具有实体类型字段和多个实体的symfony表单

时间:2016-10-23 22:31:17

标签: symfony entity choice

我有两个具有一些属性的实体:

  1. 类别
    • 类别名称
    • 类别说明
  2. 子类别
    • 子类别名称
    • 子类别描述
    • 类别ID(ManyToOne关系)
  3. 子类别实体中存在ManyToOne关系,即几个子类别可以连接到一个类别。

    我想构建一个带有下拉列表所有子类别的表单,但我想显示类别和子类别的名称,列表看起来如下:

    • 类别1 - 子类别1
    • 类别1 - 子类别2
    • 类别1 - 子类别3
    • Category2 - Subcategory1
    • Category2 - Subcategory2
    • Category2 - Subcategory3
    • 等...

    我正在考虑在子类别类中创建一个getter,它将返回类别名称和子类别名称的串联,类似于sprintf('%s - %s',$ this-> categoryName,$ this- > subcategoryName),但我无法看到如何使用子类别类getter访问Category对象属性...

    有关实现此目标的最佳做法的想法吗?

    谢谢你, JM

2 个答案:

答案 0 :(得分:3)

我设法通过构建如下表单来实现这一目标:

        $builder
         ->add('subcategoryName', EntityType::class, array(
          'class'    => 'AppBundle:subcategory',
          'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('u')
                ->addSelect('t')
                ->join('u.category', 't' )
                ->orderBy('t.category', 'ASC')
                ->addOrderBy('u.subcategory', 'ASC');
          },
          'choice_label' => function($subcategoryname){
            return $categoryname->getcategory()->getcategoryname() . " - " . $subcategoryname->getsubcategoryName();
          },
          'multiple' => false,
          'expanded' => false,
            ))

我只是用choice_label选项搞砸了。

/ JM

答案 1 :(得分:0)

您显然可以使用此方法。当您拥有子类别表的IdCategory时,您也可以访问类别表的字段

 ->add('idCategory', EntityType::class,array(
                'data'   =>  $options[0]['idCategory'],
                'class' => 'AppBundle:subcategory',
                'choice_label' => function (subcategory $subcategory) {
                    return $subcategory->getName() . '-' . $subcategory->getCategoryID()->getName().'-'.$subcategory->getCategoryID()->getDescription();
                },
                'attr' => array(
                    'label'    => 'Category ',
                    'class' => 'form-control'
                )
            ))