vuer / laravel-balance
Laravel 包,为 Laravel 5 提供账户余额和交易功能
0.3.1
2020-09-22 20:02 UTC
Requires
- php: ^7.2.9
- moneyphp/money: ^3.2
README
安装
您可以通过以下命令使用 composer 安装此包:
composer require vuer/laravel-balance
接下来,您必须安装服务提供者
// config/app.php 'providers' => [ ... Vuer\LaravelBalance\BalanceServiceProvider::class, ];
发布迁移和配置文件
php artisan vendor:publish
迁移发布后,您可以通过运行迁移来创建表格
php artisan migrate
使用方法
准备您的模型
将账户余额与模型关联
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Vuer\LaravelBalance\Models\AccountBalance; use Vuer\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 Vuer\LaravelBalance\Services\Accountant; use Vuer\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。