首页 > 解决方案 > Symfony 4按实体类型(M:N)搜索表单,结果仅显示表单中的字段,其他缺少

问题描述

我有 2 个实体:工人 (id, firstname) 和 Profession (id, title)。

我有一些从事一种或多种职业的工人。当我打开网站时,我会看到来自工人的所有职业的工人数据。例如:

ID:2 - Tom - 老师,司机

接下来,我创建了搜索表单,我可以在其中按实体类型选择一些专业,然后单击搜索。在此之后,我看到了工人名单,但有些职业消失了,我只看到我在表格中选择的这些职业。例如,当我尝试搜索驱动程序时:

ID:2 - Tom - 司机(文字:教师职业从结果中消失)

它应该是 ID:2 - 汤姆 - 老师,司机(和以前一样,但列表应该只显示有司机专业的人,但是关于其他专业的文字应该在这里阅读)

来自搜索控制器的代码:

$repository = $this->getDoctrine()->getRepository(Worker::class);
$form = $this->createForm(WorkerSearchType::class, null, [
    'method' => 'GET',
]);

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
    $professions = $form->get('professions')->getData();

    $qb = $repository->createQueryBuilder('w')
        ->select('w, p')
        ->leftJoin('w.professions', 'p');

    if (isset($professions) && count($professions) > 0) {
        $qb->andWhere('p.id IN (:professions)')
            ->setParameter('professions', $professions);
    }

    $qb = $qb->getQuery();
}

if (!isset($qb)) {
    $qb = $repository->createQueryBuilder('w')
        ->select('w')
        ->orderBy("w.created", 'DESC')
        ->getQuery();
}

表单类型的片段:

$builder
    ->add('professions', EntityType::class, array(
        'class'         => Profession::class,
        'query_builder' => function (EntityRepository $er) {
            return $er->createQueryBuilder('u')
                ->orderBy('u.name', 'ASC');
        },
        'choice_label' => 'name',
        'multiple'     => true,
        'expanded'     => false,
        'required'     => false,
        'label'        => false,
    ));

标签: formssymfonysearchdoctrine

解决方案


推荐阅读