【问题标题】:Object sort order is wrong对象排序顺序错误
【发布时间】:2014-03-25 00:51:34
【问题描述】:

我试图找出 xPDO SQL 查询的排序顺序有什么问题,

这个查询

$criteria = $this->modx->newQuery($table);
$criteria->sortby($sortby,$sortdir);
$options = $this->modx->getCollectionGraph($table,$criteria);
$criteria->prepare();
echo '<pre>'.$criteria->toSQL().'</pre>';

导致这条 SQL ~ 这是正确的:

SELECT `Location`.`id` AS `Location_id`, `Location`.`created` AS `Location_created`,
 `Location`.`modified` AS `Location_modified`, `Location`.`location` AS 
`Location_location`, `Location`.`group` AS `Location_group`, `Location`.`comment` 
AS `Location_comment` 
FROM `flow_location` AS `Location` ORDER BY location asc

但是,如果我尝试循环查询:

foreach($options as $option) {
    echo $option->get($value).'<br>';
}

它将在数据库中按订单ID显示记录!?

我该如何解决这个问题?

【问题讨论】:

    标签: php modx-revolution xpdo


    【解决方案1】:

    您按location asc 订购,但您的查询中未定义location。您将列 location 重命名为 Location_location,因此您应该通过 Location_location asc 订购。

    SELECT `Location`.`id` AS `Location_id`, `Location`.`created` AS `Location_created`,
     `Location`.`modified` AS `Location_modified`, `Location`.`location` AS 
    `Location_location`, `Location`.`group` AS `Location_group`, `Location`.`comment` 
    AS `Location_comment` 
    FROM `flow_location` AS `Location` ORDER BY location asc
    

    【讨论】:

    • 如果我在 sql 浏览器中运行该查询,它确实可以正常工作并正确排序 - 我明白你在说什么,尝试按 Location_location 排序会产生相同的结果 [$criteria->sortby($table.' _'.$sortby,$sortdir);我不确定您是否可以对 getCollectionGraph 进行排序,因为如果我只使用“getCollection”,代码确实可以工作
    • 明白了。不太了解 modx,但您可以在 php 中使用 usort() 函数对查询后的对象进行排序。搜索 SO 以获取一些示例
    猜你喜欢
    • 2021-08-06
    • 2023-01-30
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多