Dealing with Money can be complicated. It's not only about float/integer in DB, but also about Currency, especially with multiple currencies. We will show you how to deal with them, in this example.
First, we have created a Currency
Model with a name
and symbol
fields. Then, we have seeded some basic currencies:
database/seeders/DatabaseSeeder.php
use App\Models\Currency; // ... $currencies = [ [ 'name' => 'USD', 'symbol' => '$', ], [ 'name' => 'EUR', 'symbol' => '€', ], [ 'name' => 'GBP', 'symbol' => '£', ],]; foreach ($currencies as $currency) { Currency::create($currency);} // ...
Next, we created a model that uses currency. In our case, this was SubscriptionPlan
which has a price. To store the price, we have created a MoneyCast
that stores the price as an integer in the database:
php artisan make:cast MoneyCast
In the MoneyCast
, we have defined the set
and get
methods to store and retrieve the...