我目前正在用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: {
}
}
请让我知道如果它不工作