Doctrine2自定义记录顺序

时间:2014-12-21 17:52:49

标签: doctrine-orm

我有简单的查询来从数据库中获取所有图片:

$this->createQueryBuilder('p')
        ->getQuery()
        ->getResult();

我有ID数组,它表示如何在结果数组中排列它们。我怎样才能告诉学说,按照特定的顺序返回这些图片?例如,我的“订单数组”是[3,5,9,1,10],我希望以特定顺序获得结果。

1 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。如果你正在使用postgresql,你可以在这里尝试一个原始查询:ORDER BY the IN value list。如果您使用的是mysql,可以尝试以下建议:Ordering by the order of values in a SQL IN() clause

如果你想通过直接的Doctrine来做,你可以创建一个命令结果的通用映射器函数。对于非常大的结果集,您可能遇到性能问题,因为您有O(n ^ 2)。但它比使用自己的自定义Doctrine函数来处理它更简单,依赖于数据库实现。

假设您的查询返回带有以下ID的5个结果:(95,4,1,33,35)。现在说你希望它们返回为(1,35,4,33,95):

$entities = $em->getRepository('YourBundle:Picture')->findBy(/*some criteria*/);

$orderFunction = function($id) use ($entities)
{
    foreach ($entities as $entity)
    {
        if ($entity->getId() == $id) {
            return $entity;
        }
    }
};

$orderAs = array(1, 35, 4, 33, 95);
$orderedEntities = array_map($orderFunction, $orderAs);

现在,您的$orderedEntities数组将按照您指定的顺序排列。