【发布时间】:2015-10-12 14:43:38
【问题描述】:
我想知道如何正确存储具有belongsTo 关系和不为空的外键列的对象。
例子:
我如何在 index.js 中声明关联
User.hasMany(Product)
Product.BelongsTo(User)
考虑到在产品表中我们有一个外键列 NOT NULL 在用户表中引用 id。
根据sequelize文档(here),
我可以这样写:
Product.create({
title: 'Chair',
User: {
first_name: 'Mick',
last_name: 'Broadstone'
}
}, {include: [ User ]});
但我总是有这个错误:
[错误:“user_id”列中的空值违反非空约束]
如果我检查 SQL 日志,我注意到 Sequelize 正在尝试将具有 NULL 的 User 之前的 Product 插入 user_id 列。
我的问题是:
1/ 外键列必须可以使用 sequelize 为空?
2 这段代码先插入用户,然后插入具有所需关系的产品,不是吗?
3/ 我是不是也做错了什么?
【问题讨论】:
-
你能发布你的模型定义吗?在文档中的示例中,查询将尝试使用列
Product.UserId作为外键。如果您对 sequelize 创建外键列没问题,您可能会定义一个不需要的额外列。或者您没有正确定义自定义外键关联。 -
当然,这就是为什么我设置选项“underscored: true”来覆盖camel Case并使用snake case。根据发生的错误,我的定义是正确的,因为 Sequelize 在数据库中找到了我的列 user_id。但是在我的 INSERT 请求中,它没有添加用户 ID,而是 NULL
-
有趣,也许是别的东西。你还能发布你的模型定义吗?
标签: node.js sequelize.js model-associations