首先,我曾经使用 Django 作为 ORM 框架,而 django 为我处理一切……创建约束、表等……但是当我看到 sequelize 是一个 ORM 框架时,我决定放弃使用 Express 对一个项目进行更改。
到目前为止我正在使用迁移,但我可以看出这与 django 方式有很大不同,我可以使用 cli 生成一个模型和第一次迁移,但我想创建带有约束等的整个表,有是一种方法吗?或者函数“has”和“belong”只是从后端的角度验证数据,而不是真正在后端创建约束?
另外一件事是我真的必须使用迁移将所有工作做两次吗?我的意思是配置我的模型,然后配置迁移中的所有字段?
最后一件事,有没有办法清除数据库并重新运行迁移?如果没有迁移,我可以使用 sync({force:true}) 但这不适用于迁移。
'use strict'
const {
Model
} = require('sequelize')
module.exports = (sequelize, DataTypes) => {
class Foo extends Model {
static associate (models) {
models.Foo.belongsTo(models.Bar, { foreignKey: 'foo_id' });
}
};
Foo.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING(100),
allowNull: false,
unique: true,
},
}, {
sequelize,
modelName: 'foo'
})
return Foo
}
const {
Model
} = require('sequelize')
module.exports = (sequelize, DataTypes) => {
class Bar extends Model {
static associate (models) { }
};
Bar.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING(100),
allowNull: false,
unique: true,
},
}, {
sequelize,
modelName: 'bar'
})
return Bar
}
迁移就像
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('foo', {
id: {
type: Sequelize.DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.DataTypes.STRING,
allowNull: false,
unique: true,
},
})
},
// How can i create my constraints here?
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('foo')
}
};
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('bar', {
id: {
type: Sequelize.DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.DataTypes.STRING,
allowNull: false,
unique: true,
},
foo_id: {
type: Sequelize.DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
})
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('bar')
}
};