forms - 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,
));
解决方案
推荐阅读
- python - 卷积算法的朴素实现
- multithreading - 餐饮哲学家问题中的饥饿
- python - 如何在 Python 中修复“IndentationError:预期有缩进块”?
- javascript - reactJS 和动态渲染与地图功能我的数据重复
- js-of-ocaml - 使用带有 js_of_ocaml 的 textarea 的值
- r - ggplot2:在 y 轴上以 %H%M%S 格式绘制秒数
- javascript - 角 | 将 JavaScript 库导入组件
- c++ - 如何在 CSR 矩阵的对角块中计算每行的非零值
- scala - 为什么添加 println 会使我的代码无法编译
- executable - 如何在 Python 3.7 中制作单个跨平台 EXE 文件