这个 sequelize 查询有啥问题

Posted

技术标签:

【中文标题】这个 sequelize 查询有啥问题【英文标题】: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')

【问题讨论】:

【参考方案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
    )

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

【讨论】:

以上是关于这个 sequelize 查询有啥问题的主要内容,如果未能解决你的问题,请参考以下文章

我想要 Sequelize 形式的这个查询

Sequelize 关联和查询此 mysql 查询

sequelize 是不是可以通过关联表中的属性过滤查询?

如何将 SQL 查询转换为 sequelize?

Sequelize 查询在多对多关系中显示附加数据

如何在 Sequelize 查询中加入另一个表