Поиск по дате, категории и тегу с Symfony 3.4

Я наконец работаю над проектом в Symfony 3, и это действительно очень интересно.

Я работаю над формой поиска публикаций по нескольким критериям (у меня есть 3 поля ввода текста: дата, категория и тег).

Итак, я обрабатываю публикацию, состоящую из даты, связанной с категорией отношением oneToMany [публикация - владелец объекта, каждая публикация - одной категории] и имеющая несколько нескольких тегов [существует связь ManyToMany с объектом Tag. Наконец, мне удалось создать форму и найти публикацию по категориям, но я хочу выполнить поиск по дате, категории и тегу. Я обнаружил ошибку, которую я мог бы решить.

Запрос на репозиторий:

   public function findEnglishByTags($date, $categorie, $tag) {

    $qb = $this->createQueryBuilder('english');
    $qb->Where('english.date = :date')
            ->andWhere('english.Categorie = :categorie')
            ->leftjoin('english.tags', 't')
            ->where('english.tags = :t.id')
            ->setParameters(array('date' => $date, 'categorie' => $categorie, 'tags' => $tag))
    ;

    return $qb->getQuery()->getResult();
}

моя функция контроллера:

 public function searchAction() {
    $form = $this->createForm('MDWEB\FrontBundle\Form\InEnglishFrontType');
    $form->handleRequest($request);
    $date = $form->get('date')->getData();
    $categorie = $form->get('categorie')->getData();
    $tag = $form->get('tags')->getData();
    $em = $this->getDoctrine()->getManager();

    $listEnglishs = $em->getRepository('MDWEBInEnglishBundle:InEnglish')->findEnglishBytags(new \DateTime($date->format('Y-m-d')), $categorie, $tag);
    var_dump($listEnglishs);
    return $this->render('MDWEBFrontBundle:InEnglish:list.html.twig', array(
                'form' => $form->createView(),
                'listEnglishs' => $listEnglishs
    ));
}

Это ошибка, с которой я столкнулся:

введите описание изображения здесь

Пожалуйста, прочтите При каких обстоятельствах я могу добавить к своему вопросу «срочно» или другие похожие фразы, чтобы получить более быстрые ответы? - вкратце, это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.

halfer 09.09.2018 19:41

Кроме того, убедитесь, что вы прикрепляете все ошибки / журналы в виде текста, а не снимка экрана ...

Jovan Perovic 10.09.2018 10:38

@ user10269341: Syntax error обычно означает, что ваш DQL не может быть "скомпилирован" в SQL. Пожалуйста, прикрепите вывод $queryBuilder->getDQL() перед getResult() с запросом ...

Jovan Perovic 10.09.2018 10:45
Стоит ли изучать 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 и хотите разрабатывать...
1
3
212
2

Ответы 2

Не могли бы вы попробовать:

$qb = $this->createQueryBuilder('english');
      ->select('english')
      ->leftJoin('english.tags', 't')
      ->where('english.date = :date')
      ->andWhere('english.Categorie = :categorie')
      ->andWhere('english.tags = :tags')
      ->setParameters([
           'date'       => $date,
           'categorie'  => $categorie,
           'tags'       => $tag
      ])

Кажется, в setParameters вы пытаетесь установить tags, но в запросе вы пытаетесь сделать english.tags = :t.id. Убедитесь, что date - это дата-время. $ tag и $ category являются экземплярами категорий и тегов.

В этом есть смысл, но разве в таком случае не было более подробного сообщения?

Jovan Perovic 10.09.2018 10:43

Я согласен с тобой @JovanPerovic, это одна проблема

klsdskldsd 10.09.2018 10:48

спасибо за ваш ответ, но этот код также поддерживает синтаксическую ошибку, связанную с тегом

user10269341 10.09.2018 22:56

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

 public function findEnglishByTags($date, $categorie, $tags) {
    $tags_values = $tags->getValues();
    array_walk($tags_values, function (&$item) {
        $item = $item->getId();
    });


    $qb = $this->createQueryBuilder('english');
    $qb->where('english.date = :date')
            ->andWhere('english.Categorie IN (:categories)')
            ->leftjoin('english.tags', 't')
            ->andWhere('t.id IN (:tags)')
            ->setParameters(array('date' => $date, 'categories' => $categorie->getId(), 'tags' => $tags))
    ;

    return $qb->getQuery()->getResult();
}

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