带有数组参数的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 repo的链接,其中包含许多扩展,您可以查看示例。

还有一件事——我在这里发现了至少一个FNV散列的php实现。