Возьмем пример формы 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();
}
}
Для возврата результатов требуются оба критерия!






Я провел много поисков и нашел:
Поэтому я кодирую переменную $ 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 приветствует
У меня есть предложение :-)
создать тип формы с этим "data_class"
используйте его, чтобы получить ваши данные в вашем репозитории
$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 или и то, и другое?