簡體   English   中英

使用數組參數的Symfony2 Doctrine2查詢

[英]Symfony2 Doctrine2 query with array parameter

我需要這樣查詢:

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/")
)

有更好的方法嗎?

您始終可以繞過DQL。 但是,Doctrine2旨在支持各種數據庫引擎,並允許您添加“ DQL中供應商特定的SQL功能”。 您可以閱讀此鏈接,以了解如何編寫代碼以支持mysql擴展。 還有一個指向github存儲庫的鏈接,其中包含許多擴展,您可以查看示例。

另一件事-我在這里找到了至少一個FNV哈希值的php實現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM