Wiz*_*zix 5 node.js sequelize.js
我正在学习 Sequelize,我发现有些东西很奇怪,所以我认为我做错了什么。
这是我对一个简单Posts表的迁移:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Posts', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
title: {
type: Sequelize.STRING,
allowNull: false,
},
content: {
type: Sequelize.TEXT,
allowNull: false,
},
authorId: {
type: Sequelize.INTEGER,
onDelete: 'CASCADE',
allowNull: false,
references: {model: 'Users', key: 'id'}
},
publishedAt: {
type: Sequelize.DATE,
allowNull: true
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Posts');
}
};
Run Code Online (Sandbox Code Playgroud)
这里还有一个小问题,allowNull: false如果我不希望它们为空,我是否必须指定标题和内容。我想是的,但我看到的许多项目都没有具体说明。
这是Post模型:
'use strict';
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define('Post', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
title: {
type: DataTypes.STRING,
allowNull: false,
},
content: {
type: DataTypes.TEXT,
allowNull: false,
},
publishedAt: {
type: DataTypes.DATE,
allowNull: true
},
}, {
classMethods: {
associate: function (models) {
Post.belongsTo(models.User, {
onDelete: 'CASCADE',
foreignKey: {
fieldName: 'authorId',
allowNull: false
}
});
}
}
});
return Post;
};
Run Code Online (Sandbox Code Playgroud)
我在文件之间重复了相同的数据......我来自 Laravel,所以也许在 NodeJS 世界中做这样的事情很常见。
是的,目前您必须将字段定义从模型复制到其各自的迁移,这确实不是构建应用程序的好方法。
但是,有一个包可以自动从您的模型生成迁移,您可以在这里查看: https: //github.com/flexxnn/sequelize-auto-migrations,但它还处于早期阶段。
您还可以在此处阅读有关同一主题的讨论:https ://github.com/sequelize/cli/issues/257
| 归档时间: |
|
| 查看次数: |
1136 次 |
| 最近记录: |