2012-07-26 84 views
0

我需要這樣的查詢:Symfony2的Doctrine2查詢與數組參數

SELECT p.pid, p.url FROM products as p WHERE url_crc IN (FNV_64("http://url1.com/"),FNV_64("http://url2.com/")) 

我需要使用FNV_64哈希函數爲每個數組變量。 在將變量傳遞給查詢構建器之前,我無法做出散列。這個哈希函數只能作爲MySQL擴展使用。

我如何使這個使用Symfony2? 例如,使用:

$qb = $em->createQueryBuilder(); 
$query = $qb->select('p.pid') 
      ->from('SRC\MainBundle\Entity\Product', 'p') 
      ->where('p.url_crc IN (FNV_64(:urls))') // error HERE 
      ->setParameter('urls', $hashes_array) 
      ->getQuery(); 

不行。只有這樣,我可以在此的是:

$query = $em->createNativeQuery('SELECT p.pid, p.url FROM products as p 
           WHERE url_crc IN (' . join(',', $tmp_array) . ')', $rsm); 

凡tmp_array看起來是這樣的:

Array 
(
    [0] => FNV_64("http://url1.com/") 
    [1] => FNV_64("http://url2.com/") 
) 

有沒有更好的辦法?

回答

1

你總是可以繞過DQL。但是,Doctrine2旨在支持各種數據庫引擎,並允許您在「DQL」中添加「供應商特定的SQL功能」。你可以閱讀This link來看看你如何編寫代碼來支持你的mysql擴展。還有一個github回購的鏈接,其中有許多擴展可供您查看示例。

另一件事 - 我發現至少有一個PHP實現的FNV散列here.