Php 使用Symfony 3.4按日期、类别和标签搜索
我终于在symfony3上做了一个项目,它真的很有趣 我根据几个标准(我有3个输入文本字段:日期、类别和标签)编写出版物搜索表单 因此,我处理的出版物包含一个日期,通过关系oneToMany链接到一个类别[出版物是实体所有者,每个出版物属于一个类别],并且有几个标记[许多人与标记实体之间存在关系。最后,我设法创建了表单,并按类别查找出版物,但我想按日期、类别和标记进行搜索。我遇到了一个错误,可以解决它 存储库请求:Php 使用Symfony 3.4按日期、类别和标签搜索,php,symfony,doctrine-orm,query-builder,symfony-3.4,Php,Symfony,Doctrine Orm,Query Builder,Symfony 3.4,我终于在symfony3上做了一个项目,它真的很有趣 我根据几个标准(我有3个输入文本字段:日期、类别和标签)编写出版物搜索表单 因此,我处理的出版物包含一个日期,通过关系oneToMany链接到一个类别[出版物是实体所有者,每个出版物属于一个类别],并且有几个标记[许多人与标记实体之间存在关系。最后,我设法创建了表单,并按类别查找出版物,但我想按日期、类别和标记进行搜索。我遇到了一个错误,可以解决它 存储库请求: public function findEnglishByTags($da
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
));
}
这就是我遇到的错误:
您能试试吗请:
$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中您尝试设置
标记
,但在查询中您尝试设置english.tags=:t.id
。请确保日期
是日期时间。$tag和$categorie是categorie和tag的实例。感谢每位成员的合作,感谢他们为我提供了帮助,
最后我找到了解决方案,我想和你分享,也许其他人需要它
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();
}
请阅读-总结是,这不是向志愿者致辞的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。此外,请确保以文本形式附加任何错误/日志,而不是屏幕截图…@user10269341:
语法错误
通常意味着您的无法将QL“编译”为SQL。请在getResult()之前附加$queryBuilder->getDQL()的输出
查询…这很有意义,但是在这种情况下没有更详细的消息吗?我同意你@JovanPerovic这是一个问题谢谢你的回答,但这段代码还支持与标记相关的语法错误