Php 使用Symfony 3.4按日期、类别和标签搜索

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

我终于在symfony3上做了一个项目,它真的很有趣

我根据几个标准(我有3个输入文本字段:日期、类别和标签)编写出版物搜索表单

因此,我处理的出版物包含一个日期,通过关系oneToMany链接到一个类别[出版物是实体所有者,每个出版物属于一个类别],并且有几个标记[许多人与标记实体之间存在关系。最后,我设法创建了表单,并按类别查找出版物,但我想按日期、类别和标记进行搜索。我遇到了一个错误,可以解决它

存储库请求:

   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这是一个问题谢谢你的回答,但这段代码还支持与标记相关的语法错误