让我们以https://symfony.com/doc/current/forms.html#building-the-form示例表格为例,但仅针对任务列表中的搜索而不是保存。
目标是允许搜索任务,DueDate或这两个条件(在我的实际情况下,我有9个条件)
这是 src / Repository / ResultRepository.php :
class ResultRepository extends ServiceEntityRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, Result::class);
}
public function findMultiKeys($task, $dueDate): array
{
$qb = $this->createQueryBuilder('d')
->andWhere('d.task = :task')
->setParameter('task', $task)
->andWhere('d.dueDate = :dueDate')
->setParameter('dueDate', $dueDate)
->getQuery();
return $qb->execute();
}
}
需要两个条件才能返回结果!
答案 0 :(得分:0)
我进行了很多搜索并找到:
所以我编写了一个 $ where_string 变量,以在哪里构造我的变量。 和 $ parameters 来构造变量参数数组,而我的findMultiKeys变为:
public function findMultiKeys($get_form): array
{
$where_string = '';
$parameters = [];
$task = $get_form->getTask();
if ($task !== null) {
$where_string .= "d.task = :task";
$parameters += array('task' => $task);
}
$dueDate = $get_form->getDueDate();
if ($dueDate !== null) {
if ($where_string !== '')
$where_string .= " AND ";
$where_string .= "d.dueDate = :dueDate";
$parameters += array('dueDate' => $dueDate);
}
$qb = $this->createQueryBuilder('d')
->where($where_string)
->setParameters($parameters)
->getQuery();
return $qb->execute();
}
它可行,也许不是最好的方法? 在搜索中,我发现当然可以使用 ElasticSearch ,或者很满足我的简单需求,或者我发现PetkoparaMultiSearchBundle
欢迎最佳解决方案
答案 1 :(得分:0)
我有一个建议:-)
使用此“ data_class”创建表单类型
使用它在存储库中获取数据
$qb = $this->createQueryBuilder('d'); ... if ($task4Seach ->getDueDate()) { $qb->andWhere($qb->expr()->eq('d.dueDate', ':dueDate')); $qb->setParameter('dueDate', $task4Seach->getDueDate()); }