如何解决在 Doctrine (Symfony 4.4) 中对同一实体字段使用多个过滤器
我正在尝试构建一个查询构建器,用户可以在其中选择多个过滤器在 Twig 中,我希望它们都应用于同一个实体类。我已经尝试在查询中使用 or 和 orwhere 。我犯了一个错误吗?或者有没有办法给所有的过滤器赋予相同的名称,将它们保存为一个数组并让查询在 foreach 循环中运行?
我对“或”的尝试
$fachRepository = $em->getRepository(Fach::class);
$allFachQuery = $fachRepository->findByFilter2()->orderBy('fh.h','ASC');
if (($request->query->getAlnum('h_filter'))
or($request->query->getAlnum('h_filter2'))
or($request->query->getAlnum('h_filter3'))
){
$allFachQuery
->where('fh.h LIKE :h OR fh.h LIKE :h2 OR fh.h LIKE :h3')
->setParameter('h','%' . $request->query->getAlnum('h_filter'). '%')
->setParameter('h2','%' . $request->query->getAlnum('h_filter2'). '%')
->setParameter('h3','%' . $request->query->getAlnum('h_filter3'). '%');
}
$query = $allFachQuery->getQuery();
我对“orWhere”的尝试
$fachRepository = $em->getRepository(Fach::class);
$allFachQuery = $fachRepository->findByFilter2()->orderBy('fh.h','ASC');
if (($request->query->getAlnum('h_filter'))
or($request->query->getAlnum('h_filter2'))
or($request->query->getAlnum('h_filter3'))
){
$allFachQuery
->where('fh.h LIKE :h')
->where('fh.h LIKE :h2')
->where('fh.h LIKE :h3')
->setParameter('h','%' . $request->query->getAlnum('h_filter3'). '%');
}
$query = $allFachQuery->getQuery();
解决方法
按照你的代码 $allFachQuery 是一个 QueryBuilder,你可以检查一下:
$hFilter = $request->query->getAlnum('h_filter','');
$hFilter2 = $request->query->getAlnum('h_filter2','');
$hFilter3 = $request->query->getAlnum('h_filter3','');
if (!empty($hFilter) || !empty($hFilter2) || !empty($hFilter3)) {
$allFachQuery->where(
$allFachQuery->expr()->orX(
$allFachQuery->expr()->like('fh.h',':h'),$allFachQuery->expr()->like('fh.h',':h2'),':h3')
)
);
$allFachQuery->setParameters([
'h' => "%$hFilter%",'h2' => "%$hFilter2%",'h3' => "%$hFilter3%",]);
}
$query = $allFachQuery->getQuery();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。