>

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)이"약속 "테이블에 없습니다.

이러한 쿼리를 단일 트랜잭션으로 실행하려고하는데 (예 : 외래 키 제약 조건이있는 경우 별도로 실행) 틀렸습니까?


  • 답변 # 1

    문제가 발견되었습니다. 'user_appointment'테이블에 대한 삽입에서 'db'를 참조하고 대신 'trx'를 참조해야했습니다.

    return trx.insert({appointment_id: apptId[0], user_id: userid})
                    .into('user_appointment');
    
    

관련 자료

  • 이전 iphone - Swift에서 UILabel의 textColor를 설정하는 방법
  • 다음 botframework - botbuilder 유형 오류 - 정의되지 않은 'listen'속성을 읽을 수 없습니다