lukabuz / laravel-balance
(基于 vuer/laravel-balance) Laravel 包,提供账户余额和交易功能
2.0.0
2023-04-30 02:44 UTC
Requires
- php: ^8.1
- moneyphp/money: ^3.2
This package is not auto-updated.
Last update: 2024-09-30 09:00:24 UTC
README
安装
您可以通过 composer 使用以下命令安装此包
composer require lukabuz/laravel-balance
接下来,您必须安装服务提供者
// config/app.php 'providers' => [ ... Lukabuz\LaravelBalance\BalanceServiceProvider::class, ];
发布迁移和配置文件
php artisan vendor:publish
迁移发布后,您可以通过运行迁移来创建表
php artisan migrate
用法
准备您的模型
将账户余额与模型关联
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Lukabuz\LaravelBalance\Models\AccountBalance; use Lukabuz\LaravelBalance\Models\Interfaces\AccountBalanceHolderInterface class User extends Model implements AccountBalanceHolderInterface { public function accountBalances() { return $this->morphOne(AccountBalance::class, 'holder'); } public function getAccount(string $currency): ?AccountBalance { return $this->accountBalances()->where('currency', $currency)->first(); } public function addAccountBalance(AccountBalance $accountBalance) { $accountBalance->holder()->associate($this); $accountBalance->save(); } }
账户余额
注册依赖关系
<?php use Lukabuz\LaravelBalance\Services\Accountant; use Lukabuz\LaravelBalance\Services\TransactionProcessor; class SomeController extends Controller { /** * @var Accountant */ private $accountant; /** * @var TransactionProcessor */ private $transactionProcessor; public function __construct(Accountant $accountant, TransactionProcessor $transactionProcessor) { $this->accountant = $accountant; $this->transactionProcessor = $transactionProcessor; } }
要创建账户,请使用方法 getAccountOrCreate
或 createAccount
。
$account = $this->accountant->getAccountOrCreate($user, new \Money\Currency('EUR')); $account = $this->accountant->createAccount($user, new \Money\Currency('EUR'));
要获取现有账户,请使用方法 getAccount
。
$account = $this->accountant->getAccount($user, new \Money\Currency('EUR'));
要获取账户余额值
$currency = $account->getBalance()->getCurrency(); $amount = $account->getBalance()->getAmount();
创建交易
要将 100 欧元添加到您的余额中
$account = $this->accountant->getAccount($user, new \Money\Currency('EUR')); $transaction = $this->transactionProcessor->create($account, new \Vuer\LaravelBalance\Dto\TransactionDto(100));
仅允许整数,因此如果您想放置小数,请考虑将 1 美元存储为 100。