Я наконец работаю над проектом в 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
));
}
Это ошибка, с которой я столкнулся:
Кроме того, убедитесь, что вы прикрепляете все ошибки / журналы в виде текста, а не снимка экрана ...
@ user10269341: Syntax error обычно означает, что ваш DQL не может быть "скомпилирован" в SQL. Пожалуйста, прикрепите вывод $queryBuilder->getDQL() перед getResult() с запросом ...






Не могли бы вы попробовать:
$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 являются экземплярами категорий и тегов.
В этом есть смысл, но разве в таком случае не было более подробного сообщения?
Я согласен с тобой @JovanPerovic, это одна проблема
спасибо за ваш ответ, но этот код также поддерживает синтаксическую ошибку, связанную с тегом
спасибо за сотрудничество каждому члену людей, которые мне помогают, наконец нашел решение, хотел с вами поделиться, может кому еще нужно.
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();
}
Пожалуйста, прочтите При каких обстоятельствах я могу добавить к своему вопросу «срочно» или другие похожие фразы, чтобы получить более быстрые ответы? - вкратце, это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.