2011-09-11 20 views
8

में एक LIKE डेटाबेस क्वेरी कैसे करें यह सरल होना चाहिए लेकिन मुझे एक कामकाजी उदाहरण नहीं मिल रहा है। यहां एक नियंत्रक विधि है जो त्रुटि को फेंक देती है "अमान्य पैरामीटर संख्या: बाध्य चर की संख्या टोकन की संख्या से मेल नहीं खाती"। मैं सफलतापूर्वक "searchterm" चर पोस्ट कर रहा हूं लेकिन काम करने के लिए क्वेरी नहीं प्राप्त कर सकता। क्या चीज़ छूट रही है? धन्यवाद!Symfony2

public function searchAction() 
{ 
    $request = $this->getRequest(); 

    $searchterm = $request->get('searchterm'); 

    $em = $this->getDoctrine()->getEntityManager(); 

    $query = $em->createQuery("SELECT n FROM AcmeNodeBundle:Node n WHERE n.title LIKE '% :searchterm %'") 
      ->setParameter('searchterm', $searchterm); 

    $entities = $query->getResult(); 

    return array('entities' => $entities); 

} 

उत्तर

22

'

होना चाहिए

कहां तरह n.title: SEARCHTERM

public function searchAction() { 
    $request = $this->getRequest(); 

    $searchterm = $request->get('searchterm'); 

    $em = $this->getDoctrine()->getEntityManager(); 

    $query = $em->createQuery("SELECT n FROM AcmeNodeBundle:Node n WHERE n.title LIKE :searchterm")->setParameter('searchterm', $searchterm); 

    $entities = $query->getResult(); 

    return array('entities' => $entities); 

} 
0

शायद AcmeNodeBundle\Node? डीक्यूएल AcmeNodeBundle:Node:Node - नामित पैरामीटर

9

आपको आसान डिबगिंग के लिए बनाई गई क्वेरी को डंप करना चाहिए।

मैं केवल आप भी querybuilder कोशिश कर सकते हैं सुझाव:

$qb = $this->createQueryBuilder('u'); 
$qb->where(
     $qb->expr()->like('u.username', ':user') 
    ) 
    ->setParameter('user','%Andre%') 
    ->getQuery() 
    ->getResult(); 
1

कहां n.title की तरह '%:: SEARCHTERM% मेरी Symfony2 परियोजना से उदाहरण कार्य

$qb = $em->createQueryBuilder(); 
$result = $qb->select('n')->from('Acme\NodeBundle\Entity\Node', 'n') 
    ->where($qb->expr()->like('n.title', $qb->expr()->literal('%' . $searchterm . '%'))) 
    ->getQuery() 
    ->getResult(); 

doc

2

मुझे लगता है कि इस विकल्प को भी मदद करता है:

$qb = $this->createQueryBuilder('u'); 
$qb->where('u.username like :user') 
    ->setParameter('user','%hereIsYourName%') 
    ->getQuery() 
    ->getResult(); 
+0

Thx, यह सबसे सुंदर काम करने का विकल्प मैंने पाया है। – Gingi