Knex事务查询和Postgres外键约束

时间:2019-06-10 05:57:23

标签: node.js knex.js

我正在使用knex.transaction在约会表中创建一条记录,并在user_appointments表中创建多条记录,其中后者表中的subscription_id引用了前者中的同一字段(外键约束)。

db.transaction(trx => {
        return (appointment_id ? 
        trx('appointments')
        .update({type: appointment_type, time_from: time_from, time_to: time_to, title: title, note: note})
        .where('appointment_id', '=', appointment_id)
        .returning('appointment_id')
        : 
        trx
        .insert({type: appointment_type, time_from: time_from, time_to: time_to, title: title, note: note})
        .into('appointments')
        .returning('appointment_id'))
        .then(apptId => {
            return Promise.all(user_ids.map((userid) => {
                console.log('inserting row user id:', userid);
                return db.insert({appointment_id: apptId[0], user_id: userid})
                .into('user_appointment');
            }));
        })
    })
    .then(() => {
        res.json('success');
    })
    .catch(err => {
        res.status(400).json('failed');
    });

我遇到了一个错误,因为在随后的引用约会ID的查询之前,没有执行创建约会记录的第一个查询:键(appointment_id)=(6)在表“约会”中不存在。 / p>

我在一次事务中尝试执行这些查询是否正确(即,如果存在外键约束,请分别执行)?

1 个答案:

答案 0 :(得分:0)

我发现了问题。我在插入到“ user_appointment”表中引用了“ db”,而不得不引用“ trx”:

<button onclick='deletethis(event)'>hello</button>