我有一个symfony问题:功能上运行良好,但这不符合我想要的方式。
$res = array("4","2","1","3"); // LIST ID (a.id)
$paginas = new sfDoctrinePager('TbArticle', 2);
$paginas->setQuery(Doctrine::getTable('TbArticle')->createQuery('a')->where('a.ifactive = 1')->andWhere('a.dirimage=1')->andWhere('a.stock<>0')->whereIn("a.id", $res));
$paginas->setPage($page);
$paginas->init();
它可以正常工作,但是当我调用getResults()
时,数组顺序不正确。例如,此类型返回:1,2,3,4
。我想得到:4, 2, 1, 3
($res
)
你能帮助我吗?
答案 0 :(得分:1)
不幸的是,查询无法做到这一点。
可以使用ORDER BY
子句按升序或降序返回MySQL查询。数组中的元素不使用。当您将数组作为WHERE IN
子句的参数传递时,MySQL并不关心元素的顺序,如您所见。
幸运的是有一个解决方案:)
首先,您必须使用Doctrine的功能来创建一个以您想要的方式索引的结果表。使用此:
Doctrine::getTable('TbArticle')->createQuery('a INDEX BY id')->...;
这将返回一个结果数组,其中数组键是行的id。然后,您可以重新排列结果数组以匹配您的$res
(假设$rows
具有Doctrine返回的行):
foreach ($res as $i) {
$new_array[] = $rows[$i];
}
棘手的部分是让它与分页器一起工作。但我相信你也可以这样做(尝试从分页器中检索结果并在显示之前重新排列它们。)