createQueryBuilder не работает правильно - PullRequest
0 голосов
/ 02 апреля 2020

Я работаю над кадровым проектом (веб-сайт электронной коммерции) и использую ReactJS & Symfony. Моя проблема заключается в следующем: я создал построитель запросов в своем файле: ChaussureRepository. php, чтобы найти каждый элемент в моей таблице Chaussure, где имя содержит слово, которое я набираю.

ChaussureRepository. php

/**
 * @return Chaussure[]
 */
public function findByNom($nom)
{
  $query = $this->createQueryBuilder('a')
                ->where('a.nom LIKE :name')
                ->setParameter('name', '%'.$nom.'%')
                ->getQuery();
  return $query->getResult();
}

ChaussureController. php

   * @Route("/recherche/{nom}", name="recherche_chaussure", methods={"get"})
   */
   public function index($nom) {
     $chaussures = $this->getDoctrine()->getRepository(Chaussure::class)->findByNom($nom);

Мой контроллер возвращает мне пустой массив. Когда я набираю слово в названии, которое я ищу, оно не работает, но когда я набираю полное имя, оно работает. Кто-то может помочь мне с моим createQueryBuilder заставить работать LIKE%: name%.

1 Ответ

0 голосов
/ 08 апреля 2020

Похоже, вы можете получить значение по умолчанию Repository вместо пользовательского. Реализация по умолчанию включает в себя magi c findBy методы , которые позволяют точно сопоставить поиск по любому полю вашей сущности из коробки, это поведение, которое вы получаете.

Для getRepository() Для возврата в пользовательский репозиторий необходимо указать класс репозитория в метаданных Entity. Взгляните на второй абзац здесь . Таким образом, вы должны проверить, что ваше объявление сущности включает repositoryClass:

/**
 * @ORM\Entity(repositoryClass="App\Repository\ChaussureRepository")
 */
class Chaussure
{
// Other properties
}

Другой вариант - добавить пользовательский репозиторий прямо в ваш контроллер. Это немного чище, поскольку делает явную зависимость, но может быть не идеальным, если вся ваша кодовая база использует шаблон локатора, как указано выше.

use App\Repository\ChaussureRepository;

class ChaussureController
{
    public function index($nom, ChaussureRepository $repository) { 
        $chaussures = $repository->findByNom($nom);
        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...