Yii2 Active Record 按主键 ID 排序不起作用

问题描述 投票:0回答:1

我有一个非常基本的 Yii2 ActiveRecord 查询。

$paperList = Paper::find()->orderBy(['id' => SORT_DESC])->all();

id 是我的主键列,其类型为 int 和 AUTO_INCRMENT。 当直接在 MySQL 上运行简单的

select * from paper order by id desc
时,它工作得很好,我得到一个列表,例如:18,17,16

但是当运行上面的 Yii2 代码时,它保持顺序为 16,17,18

在更大的桌子上,它似乎也排序得很奇怪。它将返回:100, 101, 102, 20, 21

但应该返回:102, 101, 100, 21, 20

如果我在代码中使用带有标准 SQL 的查询生成器,那么它就不再是 ActiveRecord。

activerecord yii2 sql-order-by
1个回答
0
投票

您的代码看起来正确。

据我所知可能的问题:

  • 冲突的逻辑或范围,如果您在模型中定义了自定义范围或过滤器,它们可能会覆盖 orderBy 子句。

  • 查询缓存 - 如果启用查询缓存,结果可能来自缓存,而不反映正确的顺序。

尝试这种方法 - 如果您使用 GridView 或类似的数据呈现,请使用 ActiveDataProvider 来管理查询:

use yii\data\ActiveDataProvider;

$dataProvider = new ActiveDataProvider([
    'query' => Paper::find()->orderBy(['id' => SORT_DESC]),
]);

如果没有帮助,请尝试检查调试工具栏以确认生成的 SQL 查询包含 ORDER BY 子句。

© www.soinside.com 2019 - 2024. All rights reserved.