You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Sequelize查询MySQL时where子句日期格式报错求助

解决Sequelize where子句查询无效值错误

问题根源

你的Job模型初始化时,第一个参数是空对象,且设置了timestamps: false——这意味着Sequelize不会自动为模型添加created_at字段,同时你也没有手动定义该字段。当你在where子句中使用created_at进行查询时,Sequelize无法识别这个未定义的字段,因此抛出无效值错误。

解决方案

  1. 在模型中显式定义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' });
    
  2. 确保正确导入Op操作符
    确认你已经从Sequelize中导入操作符对象:

    import { Op } from 'sequelize'; // ES6语法
    // 或
    const { Op } = require('sequelize'); // CommonJS语法
    
  3. 验证查询语句
    字段定义完成后,原有的两种日期格式查询语句均可正常工作:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:11:27