Symfony 3:如何以一种形式使用两个表中的两个 choices/dropdowns

Symfony 3: How to use two choices/dropdowns from two tables in one form

Symfony 版本 3.1.3

我使用名为 的实体创建了一个下拉列表,您可以在下面看到控制器,

public function studentAddClassAction( $id, Request $request )
{
    // get the student from the student table
    $em     = $this->getDoctrine()->getManager();
    $user   = $em->getRepository('PIE10Bundle:Users')->find($id);

    // new class object and create the form
    $classes= $em->getRepository('PIE10Bundle:Classes')->findAll();
    $form   = $this->createForm(ClassType::class, $classes);
    $form->handleRequest($request);

    if( $form->isSubmitted() && $form->isValid() )
    {
        // form submit operations
    }

    return $this->render(
                        'PIE10Bundle:student:layout_student_addclass.html.twig',
                        array(
                            'user'  => $user,
                            'title' => 'Add Class',
                            'tables'=> 1,
                            'form'  => $form->createView()
                        )
    );
}

并且 ClassType 低于

class ClassType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('classes',
                      EntityType::class,
                      array('class'     => 'PIE10Bundle:Classes',
                            'expanded'  => false,
                            'multiple'  => false,));
        $builder->add('Add Class',
                      SubmitType::class,
                      array('attr'  =>  array('class' => 'btn btn-primary',
                                              'style' => 'margin:15px 0;')) );
    }
}

这很好用,它提供了数据库中的所有 类。我还有另一个名为 Users 的实体,它有一个名为 roles (DC2Type:array) 的列,它有一个名为 ROLE_PARENT 的角色我可以使用以下查询

检索所有 parents
$query = $this->getDoctrine()->getEntityManager()
                    ->createQuery('SELECT u FROM PIE10Bundle:Users u WHERE u.roles LIKE :role')
                    ->setParameter('role', '%"ROLE_PARENT"%' );
$users = $query->getResult();

我的问题是如何将这些 parents 列表作为选择列表添加到 studentAddClassAction 控制器中的上述相同表格中。

如果需要任何其他信息,请告诉我。

要将一组自定义实体作为选择列表,您需要使用 a query_builder option

所以它看起来像

$builder->add('parent',
    EntityType::class,
    array('class'     => 'PIE10Bundle:Users',
        'expanded'  => false,
        'query_builder' =>  function (EntityRepository $er) {
            return $er->createQueryBuilder('u')
                ->where('u.roles LIKE :role')
                ->setParameter('role', '%"ROLE_PARENT"%');
         },
         'multiple'  => false
));