adonis/node.js 中不存在关系
Relation does not exist in adonis/node.js
我有两个表:book 和 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()
})
}
}
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
如果您需要更多信息,请不要犹豫。
我有两个表:book 和 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()
})
}
}
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
如果您需要更多信息,请不要犹豫。