Sequelize:数据库错误 - “订单子句”中的未知列

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

总长:

包含订单方向“ASC”或“DESC”属性会导致错误

Unknown column 'application.ASC' in 'order clause'

const applications = await Application.findAll({
    order: ['createdAt', 'ASC'],
    distinct: true,
    attributes: [ 
        'id',
        'applicantId',
        'jobId',
    ]
});

原文:

我一直收到此错误,但我不太明白原因。我认为这是“createdAt”字段的命名问题,但错误指向的似乎是“ASC”/“DESC”属性导致了问题

这有效:

const applications = await Application.findAll({
    order: ['createdAt'],      
    distinct: true,
    attributes: [ 
        'id',
        'applicantId',
        'jobId',
    ]
});

正在运行 SQL 查询:

SELECT `id`, `applicantId`, `jobId` FROM `applications` AS `application` ORDER BY `application`.`createdAt`;

但这不是:(将 'ASC'/'DESC' 添加到 order 属性:

order: ['createdAt', 'ASC'],

const applications = await Application.findAll({
    order: ['createdAt', 'ASC'],      
    distinct: true,
    attributes: [ 
        'id',
        'applicantId',
        'jobId',
    ]
});

SQL:

SELECT `id`, `applicantId`, `jobId` FROM `applications` AS `application` ORDER BY `application`.`createdAt`, `application`.`ASC`;

结果:

Unknown column 'application.ASC' in 'order clause'

我不知道为什么它似乎将“ASC”视为一列?我认为我遵循了正确的语法,如here

所述

这是我的模型:

const Application = sequelize.define('application', {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        notNull: true
    }
});

我认为显式地将createdAt属性添加到模型可能会对正在运行的查询或错误产生影响,但事实并非如此:

const Application = sequelize.define('application', {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        notNull: true
    },
    createdAt: {
        type: Sequelize.DATE,
        field: 'created_at',
    }
});

这是 WorkBench 中的表格:

非常感谢您的意见,因为我自己有点困惑。

谢谢

javascript sequelize.js
2个回答
4
投票

如果您需要指示排序方向,那么您需要使用

order
选项的扩展语法 - 带有对的数组的数组 - 列名称和排序方向:

order: [['createdAt', 'ASC']],

0
投票

阿纳托利,感谢您的帮助。我花了1个小时才找到这个。

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