【发布时间】:2018-08-15 02:43:26
【问题描述】:
当父母登录应用程序时,您可以在其中添加孩子的表单。我正在尝试将外键分配给正在添加孩子的父级,但不太确定如何执行此操作。我尝试将外键分配给“parent_id”,然后在帖子中调用它,但出现此错误:
未处理的拒绝 SequelizeDatabaseError: 字段 'ParentId' 没有默认值
这是我的孩子模型:
module.exports = function (sequelize, DataTypes) {
var Child = sequelize.define("Child", {
name: {
type: DataTypes.STRING,
allowNull: false
}
});
Child.associate = function(models) {
Child.belongsTo(models.Parent, {
foreignKey: "parent_id"
});
};
return Child;
}
这是“添加子”表单的路由
app.get("/addChild", function (req, res) {
res.render("addChild");
});
app.post("/addChild", function (req, res) {
console.log(req.body);
db.Child.create({
name: req.body.childName,
foreignKey: req.body.parent_id
}).then(function(data) {
console.log(data);
res.json(data);
});
});
我在我的 index.js 中使用它。方言:mysql 和 "mysql2": "^1.5.2"
'use strict';
var fs = require('fs');
var path = require('path');
var Sequelize = require('sequelize');
var basename = path.basename(module.filename);
var env = process.env.NODE_ENV || 'development';
var config = require(__dirname + '/../config/config.json')[env];
var db = {};
if (config.use_env_variable) {
var sequelize = new Sequelize(process.env[config.use_env_variable]);
} else {
var sequelize = new Sequelize(config.database, config.username,
config.password, config);
}
fs
.readdirSync(__dirname)
.filter(function (file) {
return (file.indexOf('.') !== 0) && (file !== basename) &&
(file.slice(-3) === '.js');
})
.forEach(function (file) {
var model = sequelize['import'](path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(function (modelName) {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
【问题讨论】:
-
您是否尝试将
create函数中的foreignKey替换为parent_id? -
所以看起来像这样---- parent_id: req.body.parent_id?我得到同样的错误。
-
我仍然遇到同样的错误。我是否必须像在孩子中那样在我的父模型中做任何关联?像 hasMany 一样?
-
如果可以的话,试试
Child.belongsTo(models.Parent),不要使用foreignKey,然后在create:ParentId: req.body.parent_id。如果这不起作用,则需要解决某个更深层次的错误。 -
所以你的意思是这样的:app.post("/addChild", function (req, res) { db.Child.create({ name: req.body.childName, ParentId: req. body.parent_id }).then(function(data) { console.log(data); res.json(data); }); });
标签: javascript node.js express sequelize.js