簡體   English   中英

在水線 orm (sails js) 中指定十進制(數字)數據類型的長度和比例參數

[英]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,因為它是從defaultsTo34.99推斷的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM