如何为货币列指定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, datetime, 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.99
的defaultsTo
值推断出