最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

sequelize外键返回为“Null”

IT培训 admin 3浏览 0评论

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
    });

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
    });

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论