2017-09-18 111 views
0

我对如何使用查询和已经存在的控制器(带KnpPaginator它)简单的过滤器

我有我的回购查询创建过滤器造成混淆,但通过一些东西搜索,并在我的控制器两个函数privateresultsActionpublic一个叫offreAction都在一起。

关于如何创建一个简单的过滤器的任何想法?我跟着这个tutorial但我的查询已经存在于我的回购中,并且在我应用它时不起作用。

我的回购

public function getQueryByTypeAndPro($type, User $user, $archive) 
{ 
    return $this->createQueryBuilder("opn") 
     ->andWhere("opn.type = :type") 
     ->setParameter("type", $type) 
     ->andWhere("opn.resellerId = :reseller") 
     ->setParameter("reseller", $user->getId()) 
     ->andWhere("opn.archive = :archive") 
     ->setParameter('archive', $archive) 
     ->orderBy("opn.dateCreation", "DESC") 
     ->getQuery() 
    ; 
} 

我控制器

private function resultsAction(Request $request, User $user, $type, $archive) 
    { 
     $em = $this->getDoctrine()->getManager(); 

     $paginator = $this->get('knp_paginator'); 

     $qb = $em->getRepository("STUserBundle:Operation")->getQueryByTypeAndPro($type, $user, $archive); 

     $results = $paginator->paginate(
      $qb, 
      $request->query->get('page',1), 
      $request->query->get('limit',50), 
      [ 
       'defaultSortFieldName'  => 'opn.dateCreation', 
       'defaultSortDirection' => 'desc' 
      ] 
     ); 

     return array("results" => $results, "archive" => $archive); 
    } 

public function offreAction(Request $request, User $user, $archive = false) 
    { 
     return $this->resultsAction($request, $user, Operation::OFFRE_COMMERCIALE, $archive); 
    } 

我应该为了使这项工作创造我的控制器中的新功能(公共)?或者我可以直接在结果行动KnpPaginator是什么?

谢谢

回答

0

我固定我的问题。 下面是答案

这里是我的查询,我添加了过滤器

public function getQueryByTypeAndPro($type, User $user, $archive, $filter) 
{ 
    return $this->createQueryBuilder("opn") 
     ->andWhere("opn.type = :type") 
     ->setParameter("type", $type) 
     ->andWhere("opn.resellerId = :reseller") 
     ->setParameter("reseller", $user->getId()) 
     ->andWhere("opn.archive = :archive") 
     ->setParameter('archive', $archive) 
     ->andWhere('opn.vehiculeMarque like :vehiculeMarque') 
     ->setParameter('vehiculeMarque', '%' . $filter . '%') 
     ->andWhere('opn.id like :id') 
     ->setParameter('id', '%' . $filter . '%') 
     ->orderBy("opn.dateCreation", "DESC") 
     ->getQuery() 
    ; 
} 

这是我如何使用它在控制器

$qb = $em->getRepository("STUserBundle:Operation")->getQueryByTypeAndPro($type, $user, $archive, $filter); 

,这里是我如何使用它在我的鉴于

<form action="" method="get"> 
     <input name="filter" type="text"> 
     <button type="submit" class="btn btn-default">Filtrer</button> 
</form> 

希望帮助

0

可以使用findBY功能Ⅰ-E

$em->getRepository("STUserBundle:Operation")->findBy(array('type'=>type,'resellerId'=>resellerId,'archive'=>archive),array('dateCreation'=>DESC)) 
+0

你好,感谢你的帮助。但它不起作用。 findBy(array('type'=> type,'resellerId'=> resellerId,'archive'=> archive),array('dateCreation'=> DESC))'show type,resellerId并将其归档为'undefined constant'真的不知道我该怎么办 –

+0

未定义的常量意味着你没有初始化你的变量。请初始化你的变量,然后它肯定会工作。 只是为了调试变量的硬编码值。 –

+0

如果我的控制器和查询和参数已经存在,我可以在哪里以及如何初始化它们? :/我有点新的编码我不明白在控制器中的所有 –