Symfony4 / Doctrine2上具有可变数量标准的表格

时间:2018-10-09 14:20:53

标签: php symfony doctrine-orm

让我们以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();
    }   
}

需要两个条件才能返回结果!

2 个答案:

答案 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)

我有一个建议:-)

  1. 您可以使用9个条件(不包含)来构建task4Seach实体 持久性)
  2. 使用此“ data_class”创建表单类型

  3. 使用它在存储库中获取数据

$qb = $this->createQueryBuilder('d');

...
if ($task4Seach ->getDueDate()) {
          $qb->andWhere($qb->expr()->eq('d.dueDate', ':dueDate'));
          $qb->setParameter('dueDate', $task4Seach->getDueDate());
 }