2011-09-11 36 views
8

Điều này phải đơn giản nhưng tôi không thể tìm thấy ví dụ làm việc. Đây là một phương pháp điều khiển mà ném lỗi "Số tham số không hợp lệ: số biến bị ràng buộc không khớp với số mã thông báo". Tôi đang đăng biến thành công "searchterm" nhưng không thể truy vấn được. Cái gì còn thiếu? Cảm ơn!Cách thực hiện truy vấn cơ sở dữ liệu LIKE trong 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); 

} 

Trả lời

22

dụ Làm việc từ dự án Symfony2 tôi:

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

có thể AcmeNodeBundle\Node? Trong DQL AcmeNodeBundle:Node:Node - thông số có tên

9

Bạn nên kết xuất truy vấn được tạo để gỡ lỗi dễ dàng hơn.

Tôi chỉ có thể đề nghị bạn cũng thử querybuilder:

$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

1

ĐÂU n.title LIKE '% searchterm% '

phải là

ĐÂU n.title THÍCH: 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); 

} 
2

Tôi nghĩ rằng tùy chọn này cũng giúp:

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

Thx, đó là lựa chọn làm việc thanh lịch nhất mà tôi tìm thấy. – Gingi

Các vấn đề liên quan