首页 > 解决方案 > Sequelize - 保存父母时设置孩子的外键

问题描述

我正在使用 Sequelize 5。当从数据库中获取父母时,当孩子不存在时,我无法将父母与孩子一起保存。

我的代码:

  const parent: Parent = await Parent.schema(tenant).findByPk<Parent>(parentId, { include: relations });
  parent.update({
    medizinischeAngaben: 'This works',
    hochbegabung: 'Also works'
  });
  parent.person.update({
    name: 'This works'
  });
  if ( parent.child === null) {
    const newChild: Child = await Child.schema(tenant).create({name: 'CHILD_NAME'});
    parent.child = newChild;
    parent.save();
  }
  parent.child.update({
    name: 'Name from Frontend'
  });
  parent.save(); 

它将数据保存在 Parent 上(第 3 行和第 4 行)。当像 person 这样的子属性存在时,更新也有效 - 第 7 行。然后我得到了一个可能为 null 的子属性。我在if中检查它。我创造了一个新的孩子。它被保存到数据库中。然后我尝试关联到父级并保存父级。

我希望外键 id_child 设置在父级上,但它不会发生。

有趣的是:当我后来用前端的名字更新孩子的名字时,这也正确地保存到了数据库中。

如何正确保存父关联?

数据库是 PostgreSQL

标签: node.jssequelize.jssequelize-typescript

解决方案


如果 Child 的主键是 auto_increment,Sequelize 不会从数据库中检索该值(在调试器中检查)。因此,该行parent.child = newChild;实际上将外键设置为空。

您可以尝试options.returning : true使用 create 语句 - 它仅适用于 Postgres,并且似乎它应该使您的代码正常工作。我使用 MySql,没有这样的选项,您必须在与父级关联之前选择新插入的行。


推荐阅读