javascript - 无法在 Sequelize 中插入具有不可为空外键的行

标签 javascript node.js orm sequelize.js

我有3张 table 。

表情符号,EmojiPost,用户。

关于模式的有用信息如下:

EmojiPost.belongsTo(User, { foreignKey: 'user' });
EmojiPost.belongsTo(Emoji, {foreignKey: 'emoji_type'});
User.hasMany(EmojiPost, {foreignKey: 'user', onDelete: 'cascade'});

当我定义了这样的关联时,我可以执行以下操作将 EmojiPost 插入到数据库中:
var data = {
    // some fields
    user: 1,
    emoji_type: 1
}

EmojiPost.create(data);

这很完美。但是,我希望外键不可为空,因此我将关联定义更改如下:
EmojiPost.belongsTo(User, { foreignKey: {field: 'user', allowNull: false} });
EmojiPost.belongsTo(Emoji, {foreignKey: {field: 'emoji_type', allowNull: false}});
User.hasMany(EmojiPost, {foreignKey: 'user', onDelete: 'cascade'});

之后,即使数据同时包含 emoji_type 和用户值,但我收到了它们两个的非空约束违规。

我还尝试了以下插入:
var emoji = await Emoji.findByPk(1);
var user = await User.findByPk(1);
var emoji_post = EmojiPost.build(data); // here data does not contain user and emoji_type
emoji_post.setEmoji(emoji);
emoji_post.setUser(user);
emoji_post.save();

这会引发未定义 setEmoji 和 setUser 函数的错误。我一整天都被困在这个问题上,非常感谢任何帮助。

最佳答案

回答我自己的问题。 Emoji 的主键是 emoji_id(因为我在定义中强调了:true)。尽管我在定义中指定了外键为 emoji_type,但 postgres 中实际表中列的名称是 emoji_type,但由于某些原因,sequelize 期望我将此值作为 emojiId 传递。如果我这样做,那么它可以工作,但我仍然不知道为什么它需要 emojiId。

关于javascript - 无法在 Sequelize 中插入具有不可为空外键的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60127106/

相关文章:

java - 使用Hibernate按主键和分区键级联删除

c# - 采用哪种 DAL 方法?

javascript - 三、不同 Material (颜色)的LinePieces?

javascript - 使用 JSON -headers 解释 XMLHttpRequest 初始化中的 DOM 11 错误

node.js - Node 命令在 Windows 上的 git bash 终端中不起作用

javascript - 外部 js 文件在 Angular 2 组件内不起作用

javascript - PHP 在 Jquery UI 自动完成中显示数组

javascript - Accordion 中的访问 div

multithreading - 说 Apache 为每个请求生成一个线程,但 node.js 没有,这是什么意思?

java - Hibernate - 如何验证是否真的执行了批量插入