Sails.js无法在另一个模型的生命周期中的另一个模型中创建数据

时间:2019-05-01 22:16:44

标签: mysql sails.js

嘿,我对Sails有点陌生。我已经启用了REST api,不,我只是简单地使用发布请求主体的主体来创建数据,而无需控制器的干预。 我定义了两个模型-用户和call_log。每当我的应用程序中发生一个事件时,我都希望该事件触发users表中用户值的更改,但我也想在调用日志表中创建一个日志。 我正在使用afterCreate()生命周期方法,并尝试使用create()来将我的数据写入第二张表。我似乎没有任何错误,但是没有任何内容写入dB。

我的User.js(模型)

module.exports = {

  attributes: {

    username: {type: 'string', required: true},
    country: {type: 'string'},

  },

  afterCreate: function (valuesToSet, proceed) {
    Talk_log.create({
      uid: 'myuid',
      partner_uid: 'mypartnerid',
      action: 'yeahhh'
    }).fetch();
    valuesToSet.password = 1244;
    return proceed();
  },


};

我的Talk_log.js

module.exports = {

  attributes: {

    uid: { type: 'string', required: true},
    partner_uid: {type: 'string'},
    action: {type: 'string'}

  },

};

2 个答案:

答案 0 :(得分:0)

Documentation说:“ afterCreate生命周期回调将仅在将fetch meta标志设置为true的查询上运行”

因此使用:

User.create().fetch();

Fetch告诉Waterline(和基础数据库适配器)发送回在执行.update()、. create()、. createEach()或.destroy()查询时更新/销毁/创建的记录。

您说afterCreate(),但是在您的代码中是beforeCreate()。解决这个问题。

答案 1 :(得分:0)

我忘记了处理蓝鸟承诺的ball.vx,只有那时我才能写dB。

float vx0 = vx; // save initial value of vx
vx  = (((m_mass- ball.m_mass) *vx) + (2*ball.m_mass*ball.vx)) /(m_mass+ball.m_mass);
ball.vx  =  (((ball.m_mass-m_mass)*ball.vx) +(2* m_mass*vx0))/(m_mass+ball.m_mass);
                                                        ^^^