[英]Specify length and scale parameters of decimal (numeric) data type in waterline orm (sails js)
如何在貨幣列的水線 orm 中將decimal(length, scale)
指定為 columnType? 我發現這個問題已經被問過了。 但答案與問題無關。
這就是列屬性的樣子。 我正在使用 sails-Postgres。
attributes: {
price: {
type: 'number',
columnType: 'decimal(9,2)',
columnName: 'PRICE'
}
}
在風帆文件中,他們提到
列類型完全依賴於數據庫。 請確保您的
columnType
select 對應於對您的數據庫有效的數據類型! 如果您不指定columnType
,適配器將根據屬性的type
為您選擇一個。
但是當我提到columnType: 'decimal(9,2)'
(雖然它在 Postgres 中支持)時它不能正常工作。 當我使用藍圖檢索數據時,它以字符串形式給出價格。
{
"price": "10.00",
}
我讀到這些數據類型string, text, integer, float, date, datetime, boolean, binary, array, json, email
支持。 在那種情況下,存儲貨幣值的最佳數據類型是什么? 如果我們選擇float
數據類型,如何將價格存儲為decimal(9,2)
?
任何幫助將不勝感激。 謝謝你。
在這種情況下,我所做的是像這樣指定定義:
price: {
type: 'number',
defaultsTo: 34.99,
},
由於我在此處指定了默認價格,Waterline 將為該值創建一個float4
列類型。
還值得注意的是,我將該金額轉換為中心(乘以 100),因此數據庫將存儲的內容為3499
我發現以這種方式存儲是可以的,因為支付提供商無論如何都需要一分錢。
關於轉換,我發現它適合在beforeCreate
Waterline 生命周期回調中進行。 所以像這樣。
beforeCreate: async function (valuesToSet, proceed) {
// Compute amounts
valuesToSet.price = sails.helpers.convertAmountToCent(valuesToSet.price)
return proceed()
},
此外,Waterline 將列類型設置為 float4,因為它是從
defaultsTo
值34.99
推斷的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.