Waterline对一个模型/表应用模型更改,但忽略另一个模型/表



我目前正在用sailsJs做一个全新的项目,在mysql适配器/连接上使用水线。

现在,我只有2个表/模型。一个是User,它的工作似乎如预期的那样。当我'sails lift'时,我对这个模型所做的任何更改都应用于mysql实例。

然而,另一个模型/表是Company,除了在生成模型后第一次创建表之外,在执行'sails lift'时似乎完全忽略了它。

显然,我可以根据实例进行我希望的更改,而不依赖于风帆/水线,但它无论如何都让我发疯。

下面是被忽略的模型:

module.exports = {
tableName: 'Companies',
attributes: {
    name: {
        type: 'string',
        required: true,
        minLength: 2,
        notNull: true,
        maxLength: 50
    },
    description: {
        type: 'string',
        minLength: 2,
        maxLength: 1024,
        notNull: true,
        defaultsTo: ''
    },
    industry: {
        type: 'string',
        required: true,
        defaultsTo: 'generic'
    },
    employeeCount: {
        type: 'integer',
        required: true,
        min: 1,
        defaultsTo: 1
    },
    createdBy: {
        type: 'integer',
        required: true
    },
    //address fields
    country: {
        type: 'string',
        required: true
    },
    city: {
        type: 'string',
        required: true
    },
    street: {
        type: 'string',
        required: true
    },
    areaCode: {
        type: 'string',
        required: true
    },
    phone: {
        type: 'string',
        required: true
    }
},
beforeCreate: function(company, cb){
    //do something
}
};

EDIT:这只有在表已经创建之后才会出现问题。当我删除表并重新启动帆时,表再次使用我的所有更改创建,但是在再次更改模型之后,它不会将它们应用到表中。我猜这是一个水线错误,仍然需要修复,但我仍然想知道为什么它忽略了一个模型,但与另一个是完美的。

一个问题是在你的模型的beforeCreate你有cb作为一个参数,但它永远不会被调用,你需要cb();

建议显式指定迁移设置。有3个级别:

safe:这不会在DB中做任何更改,您需要手动进行所有更改。推荐用于生产。如果你用NODE_ENV=production做风帆提升,无论你的配置是什么,这个设置都将被应用。

alter:这将尝试反映您所做的更改,但有时可能会导致表中的数据丢失。用于开发,但不建议用于生产。

drop:这将直接删除表并重新创建。

全局迁移设置可以在config/models.js中应用。例如,

module.exports.models = {
  "migrate": "safe"
}

您还可以在您需要的任何模型中覆盖迁移设置。例如,

module.exports = {
  tableName: 'Companies',
  migrate: 'alter'
  attributes: {
  }
}

请让我知道如果它不工作

相关内容

  • 没有找到相关文章

最新更新