2012-10-25 54 views
1

我有一個術語數組,我想在一個Doctrine 2查詢中使用LIKE通配符進行匹配。數據庫是SQL,我正在使用DQL,但查詢生成器解決方案將會很好。 我當前查詢的設置是這樣的:用Doctrine&Symfony 2.1中的數組查詢查詢

foreach($textterms as $text) 
{ 
$parameters[] = '%-'.$text.'-%'; 
} 

$em = $this->getDoctrine()->getManager(); 
$query = $em->createQuery(
'SELECT p FROM Post p WHERE p.searchfield IN LIKE (:text) ORDER BY p.datetime DESC' 
     )->setParameter('text', $parameters); 
     $posts = $query->getResult(); 

,但我得到symfony的錯誤 「QueryException:語法錯誤] 0行,列62:錯誤:預期文字,得到了 '('」

是此查詢可能在教義

回答

1

您會收到這樣的錯誤,因爲查詢期待LIKE語句後的值有沒有這樣類似「像」可能的解決辦法的事,我會考慮:。

// Query Builder added to show difference in code readability I personally use queryBuilder mostly 
$query = $this->getDoctrine()->getManager()->createQueryBuilder(); 
$query->select('p') 
     ->from('Post', 'p') 
     ->orderBy('p.datetime', 'DESC'); 
$i = 0; 
$parameters = array(); 
foreach ($textterms as $key => $text) 
{ 
    $query->orWhere('p.searchfield LIKE ?' . $i++); 
    $parameters[] = '%-' . $text . '-%'; 
} 
$query->setParameters($parameters); 
$posts = $query->getQuery()->getResult(); 

// Query 
$orX = new \Doctrine\ORM\Query\Expr\Orx(); 
$i = 0; 
$parameters = array(); 
foreach ($textterms as $text) 
{ 
    $orX->add('p.searchfield LIKE ?' . $i++); 
    $parameters[] = '%-' . $text . '-%'; 
} 
$orX = (string)$orX; 
if(!empty($orX)) 
{ 
    $orX = 'WHERE ' . $orX; 
} 
$sql = sprintf('SELECT p FROM Post p %s ORDER BY p.datetime DESC', $orX); 
$query = $this->getDoctrine()->getManager()->createQuery($sql); 
$query->setParameters($parameters); 
$posts = $query->getResult(); 
+0

嗨,我玩你的查詢生成器解決方案\t \t \t foreach($ texterms as $ text){$ query-> orWhere('p.searchfield LIKE?'。$ i ++); $ parameters [] ='% - ' 。 $ text。 ' - %';} 但由於某些原因,即使查詢似乎要經過symfony記錄器,也沒有任何內容放入posts數組中。 – Joe

+0

我無法找到 - > setparameters是爲了工作。是否意味着是一個key =>值的數組?當我嘗試$參數[我] ='% - '。 $ text。 ' - %';我收到錯誤「Invalid parameter:token 15 is not defined in the query。」感謝您的幫助 – Joe

+1

[一個更清晰的setParameters用法示例](http://docs.doctrine-project.org/en/2.0。 x/reference/query-builder.html#binding-parameters-to-your-query)如果你正在使用'$ parameters [$ i]'請記住我已經在$ i ++'添加到'$ parameters'中,如果出現錯誤,很可能是因爲在執行'$ parameters [15] = value;'時在數組中使用了?14。 爲了進行調試,最後嘗試'echo $ query-> getQuery() - > getSQL();''和'var_dump($ parameters);' –