2016-08-27 6 views
1

관계. 그리고 post api는 나에게 데이터를 준다. 내가 개체가 다음 삽입 할 것 루프 법안 삽입이 를 해결하는bookshelf.js/knex.js [mysql] + express.js를 사용하여 마지막 레코드 ID를 얻으십시오. 예를 들어, 1 대 다수를 통해 2 개의 테이블 (송장, 수량을 포함하는 청구서 항목)이있는 경우

knex.insert(arrayPurchaseItems, 'id').into('purchaseRequests').then() 

그래서 난 기다릴 필요가 없습니다 실행할 수있는 경우 새로운 법안 ID는 그래서 마지막 ID + 1이됩니다 그러나, 지폐 삽입 완료 전에 시작하는 구매 요청 삽입의 위험이 존재한다. 어떤 아이디어?

답변

0

이러한 시나리오에서는 db에 이미 상위 엔티티가 저장되어 있는지 확인해야합니다. 동시 액세스, 지연 등의 가능성이있는 핸들보다 간단합니다.

예를 들어이 같은 관용구는이 경우에 유용 할 수있다 :

router.post("/save-master-detail",function(req,res){ 
    var payload = req.body // make sure to have bodyParser all set on express 
    var master = payload.master 
    var details = payload.details 
    knex("master").insert(master,"idmaster").then(function(ret){ 
    master.idmaster = ret[0] 
    details = details.map(function(det){ 
     det.idmaster = master.idmaster 
     return det 
    }) 
    return knex("detail").insert(details) 
    }).then(function(){ 
    res.send("OK") // or any kind of meaningful response 
    }).catch(function(err){ 
    console.log(err) 
    res.status(500).send(err) 
    }) 
}) 
+0

내가 그 지연 주변의 방법은 그래서 세부 사항을 처리 할 수있는 완료 마스터에 대한 IO를 기다리고 있다고 생각합니다. –