【发布时间】:2015-10-09 07:30:07
【问题描述】:
我是 Sequelize 的新手,所以请耐心等待。
我使用 Sequelize 启动了一个新项目 和迁移,所以我有这样的:
迁移/20150210104840-create-my-user.js:
"use strict";
module.exports = {
up: function(migration, DataTypes, done) {
migration.createTable("MyUsers", {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
first_name: {
type: DataTypes.STRING
},
last_name: {
type: DataTypes.STRING
},
bio: {
type: DataTypes.TEXT
},
createdAt: {
allowNull: false,
type: DataTypes.DATE
},
updatedAt: {
allowNull: false,
type: DataTypes.DATE
}
}).done(done);
},
down: function(migration, DataTypes, done) {
migration.dropTable("MyUsers").done(done);
}
};
models/myuser.js:
"use strict";
module.exports = function(sequelize, DataTypes) {
var MyUser = sequelize.define("MyUser", {
first_name: DataTypes.STRING,
last_name: DataTypes.STRING,
bio: DataTypes.TEXT
}, {
classMethods: {
associate: function(models) {
// associations can be defined here
}
}
});
return MyUser;
};
如您所见,表格定义 在迁移和模型文件上都有。
我想知道是否有办法分享 代码?
我的意思是我不喜欢在两个文件中包含逻辑 如果一个字段发生变化,我必须更新两次。
更新
按照下面的 Yan Foto 示例 其他方式可能更清洁。
架构/用户
'use strict';
module.exports = {
name: 'users',
definition : function(DataTypes) {
return {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
firstname: {
type:DataTypes.STRING
},
lastname: {
type:DataTypes.STRING
},
email: {
type: DataTypes.STRING,
unique: true
},
username: {
type:DataTypes.STRING,
unique: true
}
};
}
};
模型/用户
'use strict';
var Schema = require('../schemas/users');
module.exports = function(sequelize, DataTypes) {
return sequelize.define(
Schema.name,
Schema.definition(DataTypes),
{
freezeTableName: true ,
instanceMethods: {
countTasks: function() {
// how to implement this method ?
}
}
}
);
};
迁移/20150720184716-users.js
'use strict';
var Schema = require('../schemas/users');
module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.createTable(
Schema.name,
Schema.definition(Sequelize)
);
},
down: function (queryInterface, Sequelize) {
return queryInterface.dropTable(Schema.name);
}
};
【问题讨论】:
-
我知道这已经很老了,但通常迁移的重点是在它们运行后您不会更改它们,因此如果您需要向模型添加字段,请创建一个新的迁移文件对您的数据库进行更改,因此您不会总是对 1 个模型进行 1 次迁移。您可以进行许多调整表的迁移,并且模型定义应该是更改的组合。如果您不需要此功能,您可以使用 sequelize.sync() 并且您的模型将在数据库中指示您的表而无需迁移。
标签: node.js sequelize.js