Knex.js | 运行 'knex seed:run' 由于外键两次给出错误

Knex.js | running 'knex seed:run' twice gives error because of foreign key

我的 'users' table 引用了 'business' table。

当我 运行 knex seed:run 两次时,我得到以下错误:

error: update or delete on table "businesses" violates foreign key constraint "users_business_id_foreign" on table "users"

我当前的种子是这样的:

exports.seed = (knex, Promise) =>
    knex('businesses').del()
        .then(() =>
            knex('businesses').insert([
                {...

用Knex.js解决这个问题的常规方法是什么?

取决于您使用的数据库。但是 knex 中的常规方式与使用 SQL 数据库时的常规方式完全相同。

这里有一些方法(可能还有很多更有效的方法):

  • 首先删除引用您的业务的 table 数据 table

  • 删除单个.with语句中的所有table(外键约束仅在postgresql中运行查询后检查)

  • 删除事务内的所有table并先关闭检查外键约束(mysql)

  • 在单个 TRUNCATE 语句中截断所有 table 和序列 (postgresql)