我有简单的查询来从数据库中获取所有图片:
$this->createQueryBuilder('p')
->getQuery()
->getResult();
我有ID数组,它表示如何在结果数组中排列它们。我怎样才能告诉学说,按照特定的顺序返回这些图片?例如,我的“订单数组”是[3,5,9,1,10],我希望以特定顺序获得结果。
答案 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
数组将按照您指定的顺序排列。