2011-09-11 6 views
8

이것은 간단해야하지만 실제로 작동하는 예제를 찾을 수 없습니다. 다음은 "잘못된 매개 변수 번호 : 바인딩 된 변수의 수가 토큰의 수와 일치하지 않습니다."라는 오류를 발생시키는 컨트롤러 메서드입니다. "searchterm"변수를 성공적으로 게시하지만 쿼리가 작동하지 않습니다. 없어진 물건 있어요? 감사!Symfony2에서 LIKE 데이터베이스 쿼리를 수행하는 방법

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

을 '

이어야합니다.

는 WHERE LIKE 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? DQL 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 LIKE '% : 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

들으, 그것은 내가 찾은 가장 우아한 작업을하고 있습니다. – Gingi

관련 문제