Ser*_*i R 1 migration node.js sequelize.js
我有两个关系一对多的模型.
我不明白如何创建迁移文件.每个模型是否都有自己的迁移文件,或者一个迁移文件可以根据模型和它们之间的关系创建多个表(例如在rails迁移中)?
我看了很多例子,包括Sequelize docs,还有模型创建及其迁移的原始示例.
//User model
module.exports = function (sequelize, Sequelize) {
var User = sequelize.define('users', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
password: {
type: Sequelize.STRING,
allowNull: false,
},
});
return User;
}
//Order model
module.exports = function (sequelize, Sequelize) {
var Order = sequelize.define('orders', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
price: {
type: Sequelize.INTEGER,
allowNull: false,
},
totalPrice: {
type: Sequelize.INTEGER,
allowNull: false,
},
});
return Order;
}
//db.js
//Relations
db.orders.belongsTo(db.users);
db.users.hasMany(db.orders);
Run Code Online (Sandbox Code Playgroud)
加成
我为两个模型创建了迁移:
module.exports = {
up: function (queryInterface, Sequelize, done) {
return [
queryInterface.createTable('users', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
password: {
type: Sequelize.STRING,
allowNull: false,
},
}),
queryInterface.createTable('orders', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
price: {
type: Sequelize.INTEGER,
allowNull: false,
},
totalPrice: {
type: Sequelize.INTEGER,
allowNull: false,
},
userId: {
type: Sequelize.INTEGER,
references: {
model: 'users',
key: 'id'
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE'
}
}),
done()
]
},
down: function (queryInterface, Sequelize, done) {
return [
queryInterface.dropTable('users'),
queryInterface.dropTable('orders'),
done()
]
}
};
Run Code Online (Sandbox Code Playgroud)
我是否需要为我的模型添加到我的迁移文件类方法中?
//for Order
classMethods: {
associate: function(models) {
Model.belongsTo(models.users, (as: 'users'));
}
}
//for User
classMethods: {
associate: function(models) {
Model.hasMany(models.orders, (as: 'orders'));
}
}
Run Code Online (Sandbox Code Playgroud)
//加法2
要创建新的迁移文件,需要调用sequelize migration:create,在/migrations目录中创建新文件(即默认迁移目录,可以不同).在迁移文件中,您可以使用一堆函数来创建表,更新它们或指定表列等.如果需要,可以在单个迁移文件中创建所有数据库表.模型和迁移文件之间没有直接连接 - 它们彼此独立.同样关注模型/表之间的关系.您需要指定给定表中的给定列引用其他表.
// example column definition inside migration file
// creates a foreign key referencing table 'users'
userId: {
type: Sequelize.INTEGER,
references: {
model: 'users',
key: 'id'
},
onDelete: 'CASCADE'
}
Run Code Online (Sandbox Code Playgroud)
您只需要记住Model中的字段定义与对应于指定模型/表的迁移文件中的字段/列定义之间的一致性.
您还可以使用命令sequelize model:create,同时创建用于定义Sequelize模型的文件,以及负责创建与此模型对应的表的迁移文件.
为了显示所有可能的sequelize-cli命令,只需运行即可sequelize help.
编辑
类方法associate必须仅存在于模型定义文件中,而不是存在于迁移文件中.
编辑2
迁移文件中使用的函数createTable是异步的,因此您不能像在迁移文件中那样简单地运行它们.您可以通过.then()方法链接它们或将它们作为数组返回
return [queryInterface.createTable(...), queryInterface.createTable(...)];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3946 次 |
| 最近记录: |