2016-11-28 40 views
0
/** 
    * Search result information between two dates 
    * 
*@Route("/search/{startDate}/{endDate}/{type}", name="maintenance_search_result") 
    *@Method("GET") 
    */ 
    public function searchResultAction($startDate, $endDate, $type) 
    { 
     $em = $this->getDoctrine()->getManager()->getRepository('CarMaintenanceBundle:Maintenance'); 
     $query = $em->createQueryBuilder('c') 
     ->select('c.id') 
     ->addSelect('c.type') 
     ->addSelect('c.date') 
     ->addSelect('c.cost') 
     ->addSelect('c.remark') 
     ->where('c.date > :SDATE')->setParameter('SDATE', $startDate) 
     ->andWhere('c.date < :EDATE')->setParameter('EDATE', $endDate); 

     if ("All" != $type){ 
      $query->andWhere('c.type = :TYPE1')->setParameter('TYPE1', $type); 
     } 

     $query->orderBy('c.date', 'DESC') 
      ->getQuery(); 

     $SearchRes = $query->getResult(); 

     return $this->render('maintenance/search_result.html.twig', array(
      'SearchResults'=> $SearchRes,)); 
} 

という名前の未定義のメソッド私は次のエラーを持っている:私はこのように書くときsymfonyの3 - "のgetResult"

Attempted to call an undefined method named "getResult" of class "Doctrine\ORM\QueryBuilder".

、問題はありません。検索結果が表示されます。

public function searchResultAction($startDate, $endDate, $type) 
    { 
     $em = $this->getDoctrine()->getManager()->getRepository('CarMaintenanceBundle:Maintenance'); 

     if ("All" != $type){ 
      $query = $em->createQueryBuilder('c') 
      ->select('c.id') 
      ->addSelect('c.type') 
      ->addSelect('c.date') 
      ->addSelect('c.cost') 
      ->addSelect('c.remark') 
      ->where('c.date > :SDATE')->setParameter('SDATE', $startDate) 
      ->andWhere('c.date < :EDATE')->setParameter('EDATE', $endDate) 
      ->andWhere('c.type = :TYPE1')->setParameter('TYPE1', $type) 
      ->orderBy('c.date', 'DESC') 
      ->getQuery(); 
     } else { 
      $query = $em->createQueryBuilder('c') 
      ->select('c.id') 
      ->addSelect('c.type') 
      ->addSelect('c.date') 
      ->addSelect('c.cost') 
      ->addSelect('c.remark') 
      ->where('c.date > :SDATE')->setParameter('SDATE', $startDate) 
      ->andWhere('c.date < :EDATE')->setParameter('EDATE', $endDate) 
      ->orderBy('c.date', 'DESC') 
      ->getQuery(); 
     } 
     $SearchRes = $query->getResult(); 
     return $this->render('maintenance/search_result.html.twig', array(
      'SearchResults'=> $SearchRes,)); 
    } 

最短のコードで何が問題になっていますか?

+1

ヒント:

$query->orderBy('c.date', 'DESC') ->getQuery(); 

は、このトリックを行うつもりさqueryBuilderオブジェクトは、クエリオブジェクトと同じではありません。 queryBuilder = $ em-> createQueryBuilder( 'c')から始め、何が起こるかを見てみましょう。 – Cerad

答えて

2

あなたはどこにでもgetQuery()の結果を代入していない:

$query = $query->orderBy('c.date', 'DESC') 
     ->getQuery(); 
+0

これは機能しています。ありがとう – Eskinder