mysql - sequelize 外键返回为“Null”
问题描述
我已经使用 sequelize 在我的项目中添加了外键。User 是父表,profile_personals 是子表。当我发布某些内容时,外键显示为 NULL。我正在尝试创建它,因此当我通过邮递员发布某些内容时,它可以自动获取用户 ID。
db.js 文件
const db = {};
db.sequelize = sequelize;
db.Sequelize = Sequelize;
// Models
db.Users = require('../model/User.js')(sequelize, Sequelize);
db.Personal = require('../model/profile_personal.js')(sequelize, Sequelize);
// Foreign Key Connections
db.Personal.belongsTo(db.Users, {foreignKey: 'fk_user_id', targetKey: 'user_id'});
db.Users.hasOne(db.Personal, {foreignKey: 'fk_user_id', targetKey: 'user_id'});
User.js 模型
module.exports = (sequelize, Sequelize) => {
const Users = sequelize.define('users', {
user_id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
}
},
{
timestamps: false
});
return Users;
}
profile_personals.js 模型
module.exports = (sequelize, Sequelize) => {
const Personal = sequelize.define('profile_personals', {
ID: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
biography: {
type: Sequelize.STRING
}
},
{
timestamps: false
});
return Personal;
}
Profile_personals.js 路由
var express = require("express")
var router = express.Router()
const db = require('../database/db.js');
const Personal = db.Personal;
// get all profile personals
router.get("/", (req, res) => {
Personal.findAll()
.then(personals => {
res.json(personals)
})
.catch(err => {
res.send('error: ' + err)
})
})
// Add job
router.post("/", (req, res) => {
if(!req.body.biography) {
res.status(400)
res.json({
error: "Bad Data"
})
} else {
Personal.create(req.body)
.then(() => {
res.send("Personal Added")
})
.catch(err => {
res.send("Error: " + err)
})
}
})
解决方案
我认为你的 hasOne 键被颠倒了,试试这个:
db.Users.hasOne(db.Personal, {foreignKey: 'user_id', targetKey: 'fk_user_id'});
FWIW,我的偏好是在数据模型中包含 FK 字段,以提高可读性......例如
const Personal = sequelize.define('profile_personals', {
ID: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
biography: {
type: Sequelize.STRING
},
fk_user_id : {type: Sequelize.INTEGER},
},
{
timestamps: false
});
推荐阅读
- sql-server - 如何检查 SQL Server 中的日期时间格式?
- android - Android TextView 文本不出现
- sql - oracle sql:插入长文本但接收 SP2-0778:脚本文件名和参数太长
- c# - 焦点移动 ListBox 时,不选择同一窗口上的多个 ListBox
- javascript - Javascript骰子游戏:如何根据骰子结果删除HP?
- php - php中的数学问题
- sql-server - SQL Server 2008 结果透视
- vue.js - 我对 Vue 组件结构有一些疑问
- html - 如何在html中显示当地时间?
- javascript - 在节点js中获取json变量的嵌套属性