Поиск по дате, категории и тегу с Symfony 3.4 - PullRequest
0 голосов
/ 09 сентября 2018

Я наконец работаю над проектом в 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
    ));
}

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

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

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

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

 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();
}
0 голосов
/ 10 сентября 2018

Можете ли вы попробовать, пожалуйста:

$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 & $ categoryorie являются моментами категории и тега.

...