使用Sequelize查询MySQL时where子句日期格式报错求助
解决Sequelize where子句查询无效值错误
问题根源
你的Job模型初始化时,第一个参数是空对象,且设置了timestamps: false——这意味着Sequelize不会自动为模型添加created_at字段,同时你也没有手动定义该字段。当你在where子句中使用created_at进行查询时,Sequelize无法识别这个未定义的字段,因此抛出无效值错误。
解决方案
在模型中显式定义
created_at字段
根据数据库中jobs表的created_at字段类型(比如DATE或DATETIME),在模型初始化时添加该字段定义:Job.init({ created_at: { type: DataTypes.DATE, // 或DataTypes.DATETIME,需匹配数据库实际类型 allowNull: false } // 其他业务字段... }, { sequelize, tableName: 'jobs', timestamps: false, modelName: 'Job' });确保正确导入Op操作符
确认你已经从Sequelize中导入操作符对象:import { Op } from 'sequelize'; // ES6语法 // 或 const { Op } = require('sequelize'); // CommonJS语法验证查询语句
字段定义完成后,原有的两种日期格式查询语句均可正常工作:Job.findAll({ where: { created_at: { [Op.gte]: '2022-12-31T00:00:00.000Z' } } });或者:
Job.findAll({ where: { created_at: { [Op.gte]: '2022-12-31 00:00:00' } } });
关键提示
Sequelize只会处理模型中显式定义(或自动生成的timestamps字段)的属性,未定义的字段在查询时会被判定为无效值,务必保证模型字段和数据库表结构一一对应。
内容的提问来源于stack exchange,提问作者nauman khan
相关产品推荐
相关产品推荐

