Как организовать валюту в Laravel?

В Laravel можно организовать работу с валютой, используя стандартную библиотеку Carbon и модуль Laravel Money.

Для начала установим библиотеку Carbon через Composer, выполнив следующую команду в командной строке:

composer require nesbot/carbon

После установки библиотеки Carbon нам необходимо создать миграцию для создания таблицы в базе данных, в которой будут храниться валюты. Для этого выполним команду:

php artisan make:migration create_currencies_table --create=currencies

После создания миграции откроется файл миграции в директории database/migrations/. Внутри метода up() можно определить поля таблицы:

public function up()
{
    Schema::create('currencies', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('code')->unique();
        $table->string('name');
        $table->timestamps();
    });
}

После определения полей таблицы, выполним миграцию:

php artisan migrate

Далее создадим модель Currency и добавим в неё соответствующие отношения:

namespace App;

use IlluminateDatabaseEloquentModel;

class Currency extends Model
{
    protected $fillable = [
        'code',
        'name',
    ];
}

Теперь нам необходимо создать контроллер CurrencyController, в котором будут определены методы для работы с валютами:

namespace AppHttpControllers;

use AppCurrency;

class CurrencyController extends Controller
{
    public function index()
    {
        $currencies = Currency::all();

        return view('currencies.index', compact('currencies'));
    }
}

Далее необходимо создать представление для отображения списка валют - resources/views/currencies/index.blade.php:

@extends('layouts.app')

@section('content')
    <h1>Currencies</h1>

    <ul>
        @foreach($currencies as $currency)
            <li>{{$currency->name}} ({{$currency->code}})</li>
        @endforeach
    </ul>
@endsection

В файле routes/web.php добавим маршрут для обработки запроса списка валют:

Route::get('/currencies', 'CurrencyController@index');

Теперь при обращении к URL /currencies будет отображаться список валют.

Для работы с деньгами и валютами в Laravel можно использовать модуль Laravel Money. Установим его через Composer:

composer require moneyphp/money

Затем создадим новый класс Money в директории app/Helpers:

namespace AppHelpers;

use MoneyMoney as BaseMoney;
use MoneyCurrency as BaseCurrency;

class Money
{
    public static function fromAmountAndCurrency($amount, $currencyCode)
    {
        $currency = new BaseCurrency($currencyCode);

        return new BaseMoney($amount, $currency);
    }
}

Теперь мы можем использовать класс Money для работы с деньгами и валютами в Laravel:

use AppHelpersMoney;

$money = Money::fromAmountAndCurrency(100, 'USD');

Вывод значения денежного объекта:

echo $money->getAmount();

Добавление и вычитание денег:

$money1 = Money::fromAmountAndCurrency(10, 'USD');
$money2 = Money::fromAmountAndCurrency(5, 'USD');

$result = $money1->add($money2); // сложение денег
$result = $money1->subtract($money2); // вычитание денег

Таким образом, в Laravel можно организовать работу с валютой с помощью стандартной библиотеки Carbon и модуля Laravel Money.