adonis/node.js 中不存在关系

Relation does not exist in adonis/node.js

我有两个表:bookbook_units 如下所示:

class BookSchema extends Schema {
  up () {
    this.create('books', (table) => {
      table.increments()
      table.string('code').notNullable().unique()
      table.string('description')
      table.string('authors')
      table.boolean('status').defaultTo(false)
      table.integer('user_id').references('id').inTable('users')
      table.timestamps()
    })
  }
}


class BookUnitSchema extends Schema {
  up () {
    this.create('book_unit', (table) => {
      table.increments()
      table.integer('book_id').references('id').inTable('books').notNullable()
      table.integer('unit').notNullable().unique()
      table.integer('sequence').unique()
      table.string('description')
      table.integer('qt_question')
      table.boolean('status').defaultTo(false)
      table.integer('user_id').references('id').inTable('users')
      table.timestamps()
    })
  }
}

Book 模型中,我定义了与 book_units 的关系:

class Book extends Model {

    book_units () {
        return this.hasMany('App/Models/BookUnit')
    }

}

并且在图书单位型号中:

class BookUnit extends Model {

    book () {
        return this.belongsTo('App/Models/Book')
    }

}

我正在尝试使用此 json:

book_unit 中使用邮递员进行插入
{
    "book_id": 1,
    "unit": 1,
    "sequence": 1,
    "description": "UNIT_01_GRAMMAR",
    "qt_question": 5,
    "status": false
}

但我收到了:

insert into "book_units" ("book_id", "created_at", "description", "qt_question", "sequence", "status", "unit", "updated_at", "user_id") values (, , , , , , , , ) returning "id" - relation "book_units" does not exist

这本 ID 为 1 的书存在于数据库中。为什么我会收到此错误消息?

尝试这样做

table.integer('book_id').unsigned().references('id').inTable('books').notNullable()

接下来 api 最好通过 id 获取图书,然后使用创建方法。

let book = await Book.findBy('id',params.id)//your book id from your req object
book.book_units().create({
    "book_id": 1,
    "unit": 1,
    "sequence": 1,
    "description": "UNIT_01_GRAMMAR",
    "qt_question": 5,
    "status": false
})

我测试了你的代码。

我注意到这个问题:

默认情况下,AdonisJS CLI 创建一个 table,名称为:book_units(您的代码:book_unit) 命令:> adonis make:migration BookUnit

我用 (App/Models/BookUnit):

解决了这个问题
class BookUnit extends Model {
    static get table() {
        return 'book_unit'
    } // Model table name

    ...

改变

this.create('book_unit', (table) => {

来自

this.create('book_units', (table) => {

说明

模型和迁移没有关联。如果您在迁移中更改 table 的名称,则有必要将其传递给模型。

完整代码

模式:

class BookUnitSchema extends Schema {
  up() {
    this.create('book_unit', (table) => {
      table.increments()
      table.integer('book_id').references('id').inTable('books').notNullable()
      table.integer('unit').notNullable().unique()
      table.integer('sequence').unique()
      table.string('description')
      table.integer('qt_question')
      table.boolean('status').defaultTo(false)
      table.integer('user_id').references('id').inTable('users')
      table.timestamps()
    })
  }

  down() {
    this.drop('book_units')
  }
}

//=====================================

class BookSchema extends Schema {
  up() {
    this.create('books', (table) => {
      table.increments()
      table.string('code').notNullable().unique()
      table.string('description')
      table.string('authors')
      table.boolean('status').defaultTo(false)
      table.integer('user_id').references('id').inTable('users')
      table.timestamps()
    })
  }

  down() {
    this.drop('books')
  }
}

型号:

class BookUnit extends Model {
    static get table() {
        return 'book_unit'
    }

    book() {
        return this.belongsTo('App/Models/Book')
    }
}

//==============================

class Book extends Model {
    book_units() {
        return this.hasMany('App/Models/BookUnit')
    }
}

测试:

var data = {
        "book_id": 1,
        "unit": 1,
        "sequence": 1,
        "description": "UNIT_01_GRAMMAR",
        "qt_question": 5,
        "status": false
    }
    const bookUnit = await BookUnit.create(data)

结果:

测试配置:

  • SQLite

如果您需要更多信息,请不要犹豫。