Форма с переменным количеством критериев на Symfony4 / Doctrine2

Возьмем пример формы https://symfony.com/doc/current/forms.html#building-the-form, но только для поиска в списке задач вместо сохранения.

Цель состоит в том, чтобы разрешить поиск по задаче, сроку выполнения или обоим критериям (в моем реальном случае у меня есть 9 критериев)

Вот SRC / Репозиторий / 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();
    }   
}

Для возврата результатов требуются оба критерия!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я провел много поисков и нашел:

Поэтому я кодирую переменную $ where_string, чтобы построить мою переменную where. и $ параметры для создания моего массива переменных параметров, и мой 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

Bests Solutions приветствует

У меня есть предложение :-)

  1. Вы можете создать объект task4Seach с вашими 9 критериями (без настойчивость)
  2. создать тип формы с этим "data_class"

  3. используйте его, чтобы получить ваши данные в вашем репозитории

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

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

1. в чем разница с сущностью Задача из примера symfony.com/doc/current/forms.html#creating-a-simple-form 2. symfony.com/doc/current/forms.html#building-the-form, ок 3. как решить только задачу, только dueDate или и то, и другое?

bcag2 22.10.2018 16:38

Другие вопросы по теме