当前位置: 首页 > 知识库问答 >
问题:

序列化-关联表列值在where条件

陈法
2023-03-14

Sequelize -在where条件中关联表列

我想在序列模型中执行这个查询:

SELECT * FROM `model_game` AS `Game` INNER JOIN `model_activity` AS `Activity` ON `Game`.`ActivityId` = `Activity`.`id`  WHERE `Game`.`startAt` > ('2017-03-25 07:37:36'-`Activity.duration`) AND `Game`.`status` = 'NotStarted';

我尝试使用sequelize.col()函数,但仍然无法计算值。我的代码如下

My Game model . table name model_game

var Game = sequelize.define("Game", {
    startAt: DataTypes.DATE,
    status: DataTypes.ENUM('NotStarted','Completed')
  }, {
classMethods: {
      associate: function(models) {
        Activity.belongsTo(models.Activity);
      }
}
});

我的活动模型,表名model_activity

var Activity = sequelize.define("Activity", {
    title: DataTypes.STRING,
    duration: DataTypes.INTEGER
  },{
classMethods: {
      associate: function(models) {
        Activity.hasMany(models.Game);
      }
}
});

FindQuery现在返回值,但sequelize.col(“Activity.duration”)没有任何作用

var currentTime = moment();
models.Game.findAndCountAll({
            where: { status: 'NotStarted',   
            startAt: {gt: currentTime.subtract(moment.duration(sequelize.col("Activity.duration"), 'minutes'))}, 
            },
            include: [{
                model: models.Activity             
            }]
        }).then(function(result) {
     //Success
});

但上面的代码没有填充“Activity.duration”持续时间值。没有错误,应该做些什么来纠正这一点。提前感谢

共有1个答案

郎诚
2023-03-14

可以尝试使用DATE_SUB()函数结合sequelize.literal

models.Game.findAndCountAll({
    where: {
        status: 'NotStarted',
        startAt: {
            $gt: models.sequelize.fn(
                'DATE_SUB',
                models.sequelize.literal('NOW()'),
                models.sequelize.literal('INTERVAL Activity.duration MINUTE')
            )
        }
    },
    include: [models.Activity]
}).then(result => {
    // result...
});

上述代码将生成类似于以下查询的查询:

SELECT * FROM games INNER JOIN activities
ON games.activityId = activities.id
WHERE games.status = 'NotStarted'
AND games.startAt > DATE_SUB(NOW(), INTERVAL activities.duration MINUTE);

根据您的代码和要获取的查询,我已使用 NOW() 作为要从中减去 Activity.duration 字段的日期。此外,我使用了 MINUTE 间隔,但您可以根据 Activity.duration 字段表示的内容(小时、分钟、秒等)对其进行更改。

 类似资料:
  • 本文向大家介绍Prolog关联列表,包括了Prolog关联列表的使用技巧和注意事项,需要的朋友参考一下 示例 在所有严肃的Prolog系统中,关联列表可提供比线性访问元素集合更快的速度。这些关联列表通常基于平衡树,例如AVL树。有一个称为的公共领域库library(assoc),它随许多Prolog系统一起提供,并提供O(log(N))操作,用于向集合中插入,获取和更改元素。

  • 问题内容: 我有一张只包含产品ID和类别ID的表(产品可以在多个类别中)。如何将类别ID展平到产品列中,所以我以此结束: 就像我需要循环到类别列的单独表中一样。我该怎么办?或者有更好的方法吗? 问题答案: 在MSSQL中没有内置的方法可以做到这一点。 在Microsoft SQL Server 2005中模拟group_concat MySQL函数? 很好地描述了如何实施变通办法。

  • 问题内容: 我在Web API项目中使用了Dictionary,该项目的序列化方式类似于JSON: 因为我有重复的键,所以我不能再使用Dictionary类型,而现在我正在使用 但这是以这种方式序列化的: 有没有办法像字典一样进行序列化? 谢谢。 问题答案: 如果您使用Newtonsoft Json.NET库,则可以执行以下操作。 定义一个转换器,以所需的方式写入键/值对的列表: 然后使用转换器:

  • 问题内容: 现在我想知道你们是否可以帮助我将ArrayList序列化到文件上。现在我正在从学校进行总结,但是我没有真正的编码问题。我正在制作的是GUI通讯录,当用户添加地址时,它会存储到arraylist中并添加到comboBox中。那就是我在做什么。我要问的是您是否可以序列化Arraylist。如果可以的话,你们能教我怎么做吗?或者至少给我一些教程? 非常感谢。如果你们需要在回答之前先看代码,请

  • 问题内容: 我想深入克隆一个列表。为此,我们有一种方法 所以现在要克隆我的列表,我应该先将其转换为可序列化的。是否可以将列表转换为可序列化列表? 问题答案: 已实施的所有标准实施。 因此,即使它本身不是的子类型,也可以安全地将列表强制转换为,只要您知道它是诸如或的标准实现之一。 如果不确定,请先复制列表(使用),然后知道它是可序列化的。