gpt4 book ai didi

php - Money PHP - 在数据库中持久保存 Money 对象的无损方法

转载 作者:行者123 更新时间:2023-11-29 12:08:37 26 4
gpt4 key购买 nike

我指的是 moneyphp/money我计划在我们处理货币的项目之一中使用它。文档很棒,只是它没有涉及如何在数据库中持久化。它谈到将货币对象编码为 JSON,但存储字符串使得很难像比较金额或货币那样简单地进行查询。

通过问题,我发现很少有关于 Doctrine 的讨论,而且它对于 Doctrine 来说是如此具体,以至于我无法从中受益。

简明扼要地问我的问题:如何在不丢失细节的情况下存储货币对象?我对 Postgresql 很感兴趣,但任何关系数据库都可以。

注意:我读过很多不同的方法来将货币保存在数据库中,它们 differ in how they do .我对使用此特定库的特定方式感兴趣。

最佳答案

在厌烦地阅读了许多不同的话题、帖子等之后,我得出的结论是只有两种方式是可以接受的(参见 this question 中的精彩评论):

  1. 每次保存到数据库时将所有金钱转换为最小单位(例如美分),并在检索时重新转换。

  2. 使用具有所需准确性的 DECIMAL/NUMERIC 数据类型(许多人建议在进行正常操作时使用 NUMERIC(15,4),或者在进行货币兑换操作时使用 NUMERIC(15, 6))

当然无论选择什么,都必须加上Currency列。

由于this library,我最终选择了第一种方法。 (当我问这个问题时这不是原来的),这使得这非常容易。这是作者在我创建 issue 后的解释:

I can only tell you that I personally store my monies in the database as an integer representing the amount in minor units (cents), and optionally a CHAR(3) for the currency if the application uses multiple currencies (otherwise the currency is hardcoded in the app).

You can get the amount in minor units this way, as an integer:

$money->getMinorAmount()->toInt();

And you can retrieve a Money from an integer stored in the database using:

Money::ofMinor($integerAmount, 'USD');

关于php - Money PHP - 在数据库中持久保存 Money 对象的无损方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48661170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com