2011-09-11 14 views
8

Bu basit olmalı, ancak çalışan bir örnek bulamıyorum. İşte, "Geçersiz parametre numarası: ilişkili değişkenlerin sayısı, simge sayısıyla eşleşmiyor" hatasını atan bir denetleyici yöntemidir. "Searchterm" değişkenini başarıyla gönderiyorum, ancak sorguyu işleyemiyorum. Ne eksik? Teşekkürler!Symfony2'de bir LIKE veritabanı sorgusu nasıl yapılır

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); 

} 

cevap

22

"

olmalıdır.

NEREDE GİBİ 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

belki AcmeNodeBundle\Node? DQL AcmeNodeBundle:Node:Node - adında parametre

9

Oluşturulan sorguyu daha kolay hata ayıklama için dökmelisiniz.

Ben de QueryBuilder denemenizi öneririz sadece edebilirsiniz:

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

n.title BENZER '%: searchterm% my Symfony2 projesinden örnek çalışma

$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

Bu seçenek ayrıca yardımcı düşünüyorum:

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

Thx, ben buldum en zarif çalışma seçenek. – Gingi

İlgili konular