2016-02-12 58 views
0

我想只返回開始不以alpha開頭的記錄,例如[a-z],只返回數字和符號。Symfony查詢notLike Alpha

查詢

... 
$query->andWhere(
     $query->expr()->notLike('l.name', ':letter') 
     $query->setParameter('letter', '[a-z]' . '%'); 
); 
... 

以上仍返回的一切。如果我將[a-z]更換爲a,那麼它將返回除了以a開頭的任何內容之外的所有內容,因此我知道該查詢有效。

我加https://github.com/beberlei/DoctrineExtensions/blob/master/src/Query/Mysql/Regexp.php我的應用程序

config.yml

doctrine: 
     orm: 
      dql: 
       string_functions: 
           REGEXP: Bundle\DataBundle\Doctrine\Extension\Regexp 

查詢

$query->setParameter('letter', 'REGEXP([a-z])' . '%'); 

但仍然沒有運氣,但它仍然會返回一切。

回答

1

您可以使用REGEXP在學說:

public function getNotLike(){ 
    $qb = $this->createQueryBuilder('p')->select('p.wantedWord'); 
    $qb->where(......) 
    ->andWhere('REGEXP(p.wantedWord, :word) = false')->setParameter('word', '[a-z]'); 

    return $qb->getQuery()->getArrayResult(); 
}