node.js - sequelize 使用已经存在的外键创建新记录
问题描述
我想为现有用户创建一个新的登录记录。我的用户模型是这样的:
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
userId: {
type: DataTypes.INTEGER,
primaryKey: true,
},
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING,
}, { });
User.associate = function(models) {
models.User.hasMany(models.Login, {
foreignKey: 'userId',
as: 'loginUserId'
});
};
return User;
};
我的登录模型如下所示:
'use strict';
module.exports = (sequelize, DataTypes) => {
const Login = sequelize.define('Login', {
loginId: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
ipAddress: DataTypes.STRING,
isSuccessfullLogin: DataTypes.BOOLEAN,
}, {});
Login.associate = function(models) {
Login.belongsTo(models.User, {
foreignKey: 'userId',
onDelete: 'CASCADE',
as: 'loginUserId'
});
};
return Login;
};
当我尝试通过此代码在登录表中插入记录时:
const loginRecord = await models.Login.create({
ipAddress: "127.0.0.1,
isSuccessfullLogin: true,
loginUserId: 2,
})
它给我带来了错误
未处理的拒绝 SequelizeDatabaseError:字段“loginUserId”没有默认值
注意:Mysql 向我显示了 Login 表中的 loginUserId,它还向我显示了它作为外键的约束。
任何帮助表示赞赏。
解决方案
我建议将字段id添加到模型Login并将id更改为 primaryKey
'use strict';
module.exports = (sequelize, DataTypes) => {
const Login = sequelize.define('Login', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
userId: DataTypes.INTEGER,
ipAddress: DataTypes.STRING,
isSuccessfullLogin: DataTypes.BOOLEAN,
}, {});
Login.associate = function(models) {
Login.belongsTo(models.User, {
foreignKey: 'userId',
onDelete: 'CASCADE',
as: 'loginUserId'
});
};
return Login;
};
向表中插入记录登录:
const loginRecord = await models.Login.create({
ipAddress: "127.0.0.1,
isSuccessfullLogin: true,
userId: 2,
})
推荐阅读
- java - 生成随机图形 + 关于学习 Java 的问题
- r - R中的性能图形,使用ggplot2比较两个不同的年份
- php - 带有 PHP Nginx 的 Docker 无法加载图像或 js - 找不到 404
- wpf - F# FsXaml:哪些控件支持哪些事件?
- swift - 使用 Alamofire 上传图片,Swift 3
- php - 为什么这个变量 eloquent 方法有效,我如何传递 args?
- python - Lambda 表达式和字符串
- database - 用于大型媒体嵌套元数据查询的最快 AWS DB 服务
- c - if/else if 语句中的条件格式是否必须在 C 中匹配?
- c# - Cancel all Task.Run executing particular method