2017-09-19 59 views
1

我需要進行查詢,但它不是簡單的查詢。 我需要setParameters在查詢取決於變量值。簡單代碼:流體SQL查詢依賴於變量值

$repository = $this->getDoctrine()->getRepository(Item::class); 

    $query = $repository->createQueryBuilder('b'); 

    if ($itemId != null) { 
     $query->where('b.id = :id') 
      ->setParameter('id', $itemId); 
    } 

    if ($name != "XXX") { 
     $query->where('b.name = :name') 
      ->setParameter('name', $name); 
    } 

    $item = $query->getQuery()->getResult(); 

    return $this->render('default/search/result.html.twig', 
     array('item' => $item)); 

但是這段代碼不正確。有人知道如何解決它嗎?

回答

0

您應該使用$query->andWhere()

所以你的情況:

$repository = $this->getDoctrine()->getRepository(Item::class); 

    $query = $repository->createQueryBuilder('b'); 

if ($itemId != null) { 
    $query->where('b.id = :id') 
     ->setParameter('id', $itemId); 
} 

if ($name != "XXX") { 
     $query->andWhere('b.name = :name') 
     ->setParameter('name', $name); 
} 

$item = $query->getQuery()->getResult(); 

return $this->render('default/search/result.html.twig', 
    array('item' => $item)); 

//注意: - > andWhere()可以直接使用,無需任何 - >其中()

更多在這裏看到:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html

+0

感謝您的回覆,我會盡力。 – Questionamrk

+0

@Questionamrk讓我知道,如果你仍然有問題 –

+0

我假裝的問題將是IFs bcz的複雜性我有10個變量要檢查。 – Questionamrk