2017-03-06 17 views
0

我有一些使用looback連接器postgresql從postgresql db生成的模型。這些模型的Id列是postgresql db的自動遞增整數列。如何在loopback中保留模型上插入後獲取自動ID?

1)I有加在持久性模型,其中i執行簡單的更新或插入(UPSERT中的一個的遠程方法。

Car.CreateOrUpdateCar = function (carobj, req)  { 
    Car.upsert(Carobj, function (err, Car) { 
     if (err) 
      console.log(err); 
     else { 
      req(err, Car); 
     } 
    }); 
}; 

2)增加了一個遠程鉤這個遠程方法之後執行。

 Car.afterRemote('CreateOrUpdateCar', function (context, remoteMethodOutput, next) { 
//Remaining code goes here 
     next(); 
     }); 

3)我要在步驟(1)用新插入行的標識,在步驟中提到的遠程鉤(2)

回答

0

我沒有關於PostgreSQL的分貝很多想法。但嘗試像這樣

var carObj; 
    Car.CreateOrUpdateCar = function (carobj, req)  { 
    Car.upsert(Carobj, function (err, Car) { 
     if (err) 
      console.log(err); 
     else { 
      req(err, Car); // Your Car object contains final result after upserting along with Id 
      carObj = Car; 
     } 
    }); 
    }; 

現在,您可以通過使用carObj.id獲得ID和任何你想去的地方,你可以使用它。我希望這有助於

+0

因爲它REQ(ERR,車)後,立即到遠程鉤子。 carobj在遠程鉤子中保持「未定義」。反正汽車物體本身dosent包含「身份證」。當我插入一個新的記錄。我可以在插入對象時發送{「id」= null},或者根本不指定「id」鍵。 –

0

您可以訪問到生成的ID在遠程鉤子是這樣的:

Car.afterRemote('CreateOrUpdateCar', function (context, remoteMethodOutput, next) { 
    var genId = remoteMethodOutput.id || context.result.id; 
     next(); 
     }); 
+0

這個表達式在我的例子中有點不同** remoteMethodOutput.records .__ data.id || context.result.records .__ data.id ** Still genId來自未定義。當我插入一個新的記錄。我可以在插入對象時發送{「id」= null},或者根本不指定「id」鍵。 upsert上會發生什麼,它會返回與我插入的對象相同的對象。如果我在插入對象時不添加鍵「id」,upsert返回的對象也沒有「id」。如果我將「id」指定爲null,它會將id返回爲null。 –

+0

@GaneshMahajan你檢查了'context.result.id'嗎? –

+0

是的,這也是未定義的。 Idinjection在我的模型中設置爲false。因爲我使用我自己的ID列。這是否有所作爲? –

相關問題