Format price in the current locale and currency

Stefan Bogdanescu
Founder & Senior Architect · 5 July 2026

Formatting Prices for Display in Laravel

As a developer working with e-commerce applications in Laravel, you often need to display prices in the correct locale and currency format. While you can retrieve unformatted prices using $product->getPrice(), formatting these values for presentation requires a different approach.

Understanding Money Fields in Laravel

Laravel’s Eloquent ORM provides built-in support for money fields through the Money trait. This allows you to define a price attribute as a money field, which automatically handles currency conversion and localization.

To use the Money trait in your models:

  1. Install the moneyphp/money package via composer:
composer require moneyphp/money
  1. In your model (e.g., Product.php), import the necessary namespaces and use the Money trait:
use Money\Currency;
use Money\Format as MoneyFormat;
use Money\Money;

class Product extends Model
{
    use \Money\Traits\Moneys\ConvertibleMoneyTrait;
}
  1. Define your price attribute as a money field in the $fillable or $attributes array:
protected $fillable = [
    // Other attributes...
    'price', // The price attribute is now defined as a money field.
];

Formatting Prices for Display

To format prices for display, you can use Laravel’s built-in localization features along with the number_format function.

  1. In your Blade view or controller method, retrieve the formatted price using the localized() method:
// Assuming $product is an instance of the Product model.
$formattedPrice = $product->price->getAmount()->localized();

The localized() method returns the amount in the current locale’s currency format.

  1. If you want to format the price with a specific decimal precision, you can use the format() method:
$formattedPrice = number_format($product->price, 2); // Formats the price with 2 decimal places.

Handling Currency Conversion

If your application supports multiple currencies and you need to convert prices between them, Laravel’s Money trait automatically handles this conversion.

  1. When creating or updating a product, set the currency using the Currency object:
$product = new Product([
    'name' => 'Sample Product',
    // ...
    'price' => Money::USD(9.99), // Set price with USD currency.
]);
  1. To convert the price to another currency, use the convertTo() method provided by the ConvertibleMoneyTrait:
$euroPrice = $product->price->convertTo(new Currency('EUR')); // Converts the price to Euros.

Conclusion

Formatting prices in Laravel requires a combination of handling money fields in your models and using built-in localization features for display.

By utilizing the Money trait, you can store and manipulate currency values effectively. The localized() method then allows you to retrieve prices in the correct format for the current locale.

Remember to import the necessary namespaces and define your price attribute as a money field while following Laravel’s best practices for data manipulation and display.

For more advanced use cases or custom formatting requirements, consider exploring the moneyphp/money documentation and integrating it with Laravel’s localization and currency conversion features.

Happy coding!

Our network