Symfony 1.4 + Pager:忽略顺序数组

Posted

技术标签:

【中文标题】Symfony 1.4 + Pager:忽略顺序数组【英文标题】:Symfony 1.4 + Pager : Ignore order array 【发布时间】:2013-03-27 16:17:38 【问题描述】:

我有一个 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)

你能帮帮我吗?

【问题讨论】:

查询中没有ORDER BY子句。 【参考方案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];

棘手的部分是让它与分页器一起工作。但我相信你也可以这样做(尝试从分页器中检索结果并在显示之前重新排列它们)。

【讨论】:

谢谢!我明白!我想这可能会发生

以上是关于Symfony 1.4 + Pager:忽略顺序数组的主要内容,如果未能解决你的问题,请参考以下文章

symfony、pager 和 unescape 值之一而不是所有值

FMEA中风险顺序数(RPN值)大于多少需要制订整改措施?有说100的,是美国公司的规定么?

Symfony 2 还是 Symfony 1.4? [关闭]

学习symfony 1.4会好用symfony 2.0吗?

PHP 用户登录Symfony 1.4功能测试

Symfony 1.4 的信用卡验证器