在水线格式(sails js)中指定十进制(数字)数据类型的长度和比例参数



如何为货币列指定decimal(length, scale)作为水线形式的columnType ?我发现这个问题已经有人问过了。但答案与问题无关。

这是column属性的样子。我正在使用sails-Postgres。

attributes: { 
price: {
type: 'number',
columnType: 'decimal(9,2)',
columnName: 'PRICE'
}
}

在风帆文件中,他们提到

列类型完全依赖于数据库。确保您选择的columnType对应于对您的数据库有效的数据类型!如果您没有指定columnType,适配器将根据属性的type为您选择一个。

但是当我提到columnType: 'decimal(9,2)'(虽然它在Postgres中支持)它不能正常工作。当我使用蓝图检索数据时,它将价格作为字符串给出。

{
"price": "10.00",
}

我读到这些数据类型­string, text, ­integer, float, date, ­dat­etime, ­boolean, ­binary, array, json, ­email是由水线支持的。在这种情况下,存储货币值的最佳数据类型是什么?如果我们选择float数据类型,如何将价格存储为decimal(9,2)?

任何帮助将是非常感激的。谢谢你。

在这种情况下,我所做的是像这样指定定义:

price: {
type: 'number',
defaultsTo: 34.99,
},

由于我在这里指定了默认价格,Waterline将为该值创建一个float4列类型。

值得注意的是,我将把该金额转换为中心(乘以100),所以数据库将存储的将是3499,我发现这样存储是可以的,因为支付提供商将需要一个美分的金额任何方式。

在转换上,我发现它适合在beforeCreate水线生命周期回调中进行。就像这样。

beforeCreate: async function (valuesToSet, proceed) {
// Compute amounts
valuesToSet.price = sails.helpers.convertAmountToCent(valuesToSet.price)
return proceed()
},

同样,Waterline将列类型设置为float4,因为它从34.99defaultsTo值推断出