【问题标题】:What is wrong with this sequelize query这个 sequelize 查询有什么问题
【发布时间】:2020-06-09 17:43:19
【问题描述】:

我正在构建一个带有 Sequelize ORM 的 Web 应用程序。我的查询:

if(req.query.dataTransIni && req.query.dataTransFim ){
      condition.data = {
        [op.or] : {
            [op.between] : [
              {logdatatransacao : moment(req.query.dataTransIni).format("YYYY-MM-DD")},
              {logdatatransacao : moment(req.query.dataTransFim).format("YYYY-MM-DD")}
            ],
            [op.between] : [
              {arqdataTransacao : moment(req.query.dataTransIni).format("YYYY-MM-DD")},
              {arqdataTransacao : moment(req.query.dataTransFim).format("YYYY-MM-DD")}
            ]            
        }
      }
    }

控制台报错

UnhandledPromiseRejectionWarning: Error: Invalid value { arqdataTransacao: '2019-10-10' }

我想要的样子

select * from myTable 
where 
logdatatransacao between ('2020-02-27') and ('2020-02-28')
or
arqdataTransacao between ('2020-02-27') and ('2020-02-28')

【问题讨论】:

    标签: node.js orm sequelize.js


    【解决方案1】:

    我看到您在 between Op. 中再次指定对象内的列名。

    通过提供标量数组,以下对我有用:

        const startDate = moment('2020-01-01').format("YYYY-MM-DD");
        const endDate = moment('2020-01-02').format("YYYY-MM-DD");
    
        const departments = await sequelize.models.department.findAll({
            where: {
                created: {
                    [Sequelize.Op.between]: [startDate, endDate]
                }
            },
            attributes: ['name'],
            raw: true,
            nest: true
        });
    

    SQL:

    SELECT "name" FROM "departments" AS "department" WHERE "department"."created" BETWEEN '2020-01-01 08:00:00.000 +00:00' AND '2020-01-02 08:00:00.000 +00:00';
    

    【讨论】:

    • 感谢您尝试帮助我 Samuel G,我会在这里尝试您的解决方案
    • 是的。非常感谢。我会发布我的解决方案
    • 有了你的回答,我解决了我的 sintaxe 问题
    【解决方案2】:

    解决了我的问题:

    var condition = [];
    ...
    if(req.query.dataTransIni && req.query.dataTransFim ){
          condition.push({
            [op.or] : [{
                logdatatransacao : {
                  [op.between] : [
                    moment(new Date(req.query.dataTransIni)).format("YYYY-MM-DD"),
                    moment(new Date(req.query.dataTransFim)).format("YYYY-MM-DD")
                  ]
                }
              },
              {
                arqdataTransacao : {
                  [op.between] : [
                    moment(new Date(req.query.dataTransIni)).format("YYYY-MM-DD"),
                    moment(new Date(req.query.dataTransFim)).format("YYYY-MM-DD")
                  ]
                }
            }]
          })
        }
    ...
    const Vscmc = await Modelvscmc.findAll({ 
          offset : ((offsetPage-1)*limit),
          limit: limit,
          where : condition
        })
    

    我的问题是括号和括号对象。

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 2011-10-13
      • 2010-09-07
      • 2010-10-04
      • 2011-01-15
      • 2021-05-08
      • 2017-02-02
      相关资源
      最近更新 更多