【发布时间】:2020-08-02 07:30:05
【问题描述】:
我使用Sequelize version 5 作为我的 ORM,并定义了用户和配置文件模型。两个模型之间存在一对一的关系,我希望在创建用户时自动创建配置文件。我怎样才能做到这一点?我的模型定义如下:
user.js
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define(
'User',
{
name: DataTypes.STRING,
username: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING,
},
{}
);
User.associate = function (models) {
User.hasOne(models.Profile);
};
return User;
};
profile.js
'use strict';
module.exports = (sequelize, DataTypes) => {
const Profile = sequelize.define(
'Profile',
{
location: DataTypes.STRING,
websiteUrl: DataTypes.STRING,
bio: DataTypes.TEXT,
userId: DataTypes.INTEGER,
},
{}
);
Profile.associate = function (models) {
Profile.belongsTo(models.User);
};
return Profile;
};
我还有以下迁移:
用户迁移
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
name: {
type: Sequelize.STRING
},
username: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Users');
}
};
个人资料迁移
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Profiles', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER,
},
location: {
type: Sequelize.STRING,
},
websiteUrl: {
type: Sequelize.STRING,
},
bio: {
type: Sequelize.TEXT,
},
userId: {
type: Sequelize.INTEGER,
references: {
model: 'Users',
key: 'id',
},
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
},
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Profiles');
},
};
【问题讨论】:
-
您可以在用户模型上创建一个挂钩,对 afterCreate 事件执行操作
标签: node.js express sequelize.js sequelize-cli sequelize-hooks