首页 > 解决方案 > knex / postgresql 将外键更新为空

问题描述

我正在使用带有 postgresql 的 knex.js 所以我有一个带有可为空外键的表。

缩短版:

exports.up = function (knex, Promise) {
  return knex.schema.createTable('Note', function (table) {
    table.string('id').primary()
    table
      .string('sourceId')
      .references('id')
      .inTable('Source')
      .onDelete('SET NULL')
      .index()
  })
}

exports.down = function (knex, Promise) {
  return knex.schema.dropTable('Note')
}

我可以创建带有或不带有 sourceId 的注释。但是,如果我创建一个带有 sourceId 的注释,然后更新它以将 sourceId 设置为 NULL,则更新不起作用。我没有收到错误消息,但未删除外键。

例如,如果我创建一个注释:

{
  id: '123',
  sourceId: '456'
}

然后尝试更新它:

const result = await Note.query().updateAndFetchById(id, {
  id: '123',
  sourceId: null
})

我得到的结果是:

Note {
id: '123',
sourceId: '456'
}

如果我尝试将其他可为空的值更新为 null(只要它们不是外键),我就没有问题,并且我可以将 sourceId 更新为不同的源 ID。如果我尝试将不可为空的外键更新为 null,则会出现错误。但在上述情况下,我没有收到任何错误。它只是不更新​​。

知道这里可能会发生什么吗?

标签: postgresqlknex.js

解决方案


推荐阅读