【问题标题】:Sequelize.js setter function not working as I expectSequelize.js setter 函数没有按我的预期工作
【发布时间】:2018-07-05 09:25:26
【问题描述】:

我在使用我的 Sequelize js 模型属性上的 setter 函数时遇到问题。

我想要做的是,当一个属性被赋予一个值时,使用该值同时填充表中的另一个属性。

在我的模型中,这是我有问题的属性的代码...

date_time_paid: {
  type:DataTypes.DATE,
  set(val) {
    const date = new Date(val);
    this.setDataValue('date_time_paid', val);  // set the the current property
    this.setDataValue('month_paid', `${date.getFullYear()}-${(date.getMonth() + 1)}`);  //also set another property on the same row
  },
},

我期望发生的是date_time_paid 列存储原始值,month_paid 列存储从它派生的字符串。但是,当我运行播种机以使用测试数据填充表时,month_paid 列的值仍然为空。

  1. 这是对 setter 函数的正确使用吗?
  2. 如果是我做错了什么,是否意味着它不起作用?

【问题讨论】:

    标签: javascript node.js database orm sequelize.js


    【解决方案1】:

    我认为你需要一个吸气剂。忘掉date_time_paid,为month_paid做getter吧:

    get month_paid(){
        const date = new Date(this.date_time_paid);
        return `${date.getFullYear()}-${(date.getMonth() + 1)}`;
    }
    

    【讨论】:

    • 谢谢,这可能有效,但不幸的是,这不是我需要的:Sequelize 不是查询数据库的唯一方法……其他地方也需要相同的信息。此外,据我所知,如果您在查询中使用 raw: true 标志,getter 将无法工作,因为在某些情况下我期望结果集的大小,我需要这样做。
    • 对,你试过setterMethods吗? .我不知道有什么区别,除了属性中定义的 setter 优先
    • 所以,我认为这里的代码是正确的,但问题是我在播种器中使用bulkInsert 方法填充数据库表的方式。这似乎跳过了模型创建阶段,因此不应用设置器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多