`knex.js`在播种时违反了外键约束

时间:2019-07-01 22:29:13

标签: knex.js

两个种子文件

const faker = require('faker')

exports.seed = (knex, Promise) => {
  // Deletes ALL existing entries
  return knex('posts')
    .truncate()
    .del()
    .then(() => {
      // Inserts seed entries
      return knex('posts').insert([
        {
          id: 1,
          title: faker.lorem.words(),
          body: '12 - 10',
          answers: '[12]',
          user_id: 1
        },
        {
          id: 2,
          title: faker.lorem.words(),
          body: '12 - 10 + 123',
          answers: '[12]',
          user_id: 1
        },
        {
          id: 3,
          title: faker.lorem.words(),
          body: '12 - 10 / 901',
          answers: '[12]',
          user_id: 1
        }
      ])
    })
}



exports.seed = function(knex, Promise) {
  // Deletes ALL existing entries
  return knex('users')
    .truncate()
    .del()
    .then(function() {
      // Inserts seed entries
      return knex('users').insert([
        { id: 1, email: 'george@stoplion', username: 'stoplion' },
        { id: 2, email: 'angelmcfood@gmail.com', username: 'testuser1' }
      ])
    })
}

Posts具有一个引用user_id的{​​{1}}外键。

我想在每次测试之前截断所有数据和种子。但是出现此错误:

User.id

1 个答案:

答案 0 :(得分:0)

这些种子的编写方式只能使它们运行以清理具有空usersposts表的数据库。

当数据库为空时,会发生以下情况:

  1. 1_users.js将2行写入用户表
  2. 2_posts.js用指向用户的键写3行

一切都好

当表中有数据时会发生这种情况:

  1. 1_users.js尝试清空用户表
  2. 1_users.js脚本失败,因为有些键引用了用户表

您应编写播种脚本,将所有相关数据添加到单个迁移文件中,该文件首先将两个表都截断,然后重新填充两个表。

基于表格拆分人口数据将不起作用