【问题标题】:Sequelize store object belongsTo with parent object which is not create用未创建的父对象续集存储对象 belongsTo
【发布时间】: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


【解决方案1】:

我找到了为什么它不起作用。

解释一下,我的代码会创建用户实例和产品实例, 但是 sequelize 团队有一个关于验证非空外键约束的已知错误。

解决方法有两种:

  • 输入一个虚拟值

  • 创建其他实现,例如创建父实例,然后使用 create

我认为这个bug会在以后的sequelize版本中解决

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-25
    • 2018-08-10
    • 2016-04-26
    • 1970-01-01
    • 2017-07-14
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多