我尝试使用 Knex.JS 在我的数据库中插入数据,在某些表中我有一个外键,我猜这部分项目出现了问题。
我收到此错误消息:
error: insert into "classes" ("cost", "subject", "user_id") values ($1, $2, DEFAULT) - null value in column "user_id" violates not-null constraint
我的 knex 文件:
import {resolve} from 'path'
module.exports = {
development: {
client: 'pg',
connection: {
database: "XXXX",
user: "XXXX",
password:"XXXXXXX"
},
migrations: {
directory: resolve(__dirname, 'src', 'database', 'migrations')
}
},
useNullAsDefault: true
};
和我使用的迁移:
import Knex from 'knex'
export async function up(Knex: Knex) {
return await Knex.schema.createTable('users', table => {
table.increments('id').notNullable().primary();
table.string('name').notNullable();
table.string('avatar').notNullable();
table.string('whatsapp').notNullable();
table.string('bio').notNullable();
})
}
export async function down(knex: Knex) {
return await knex.schema.dropTable('users')
}
import Knex from 'knex'
export async function up(Knex: Knex) {
return await Knex.schema.createTable('classes', table => {
table.increments('id').notNullable().primary().unique();
table.string('subject').notNullable();
table.decimal('cost').notNullable();
table.integer('user_id').
notNullable().
references('id').
inTable('users').
onDelete('CASCADE').
onUpdate('CASCADE')
})
}
export async function down(knex: Knex) {
return await knex.schema.dropTable('classes')
}
我想在插入数据的那一刻可能会出现问题,因为某些数据依赖于其他数据:
async store(req: Request, res: Response) {
const {name,
avatar,
whatsapp,
bio,
subject,
cost,
schedule
} = req.body
const trx = await knex.transaction()
try {
var created_user = await trx('users').insert({
name,
avatar,
whatsapp,
bio
})
var user_id = created_user[0]
const insertedclassesID = await trx('classes').insert({
subject,
cost,
user_id
})
我已经用 SQLite3 做到了这一点,但没有用 Postgres。例如,我必须将 ORM Knex 更改为 Sequelize?
我知道有很多问题,但我需要帮助!
谢谢你的帮助!