使用数组参数的Symfony2 Doctrine2查询

时间:2012-07-26 00:59:44

标签: php mysql symfony doctrine-orm

我需要像这样进行查询:

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 个答案:

答案 0 :(得分:1)

您始终可以绕过DQL。但是,Doctrine2旨在支持各种数据库引擎,并允许您在DQL中添加“供应商特定的SQL功能”。您可以阅读This link以了解如何编写代码来支持您的mysql扩展。还有一个指向github仓库的链接,其中包含许多扩展,您可以查看这些扩展。

另一件事 - 我发现至少有一个FNV哈希here.

的php实现