lukabuz/laravel-balance

(基于 vuer/laravel-balance) Laravel 包,提供账户余额和交易功能

2.0.0 2023-04-30 02:44 UTC

This package is not auto-updated.

Last update: 2024-09-30 09:00:24 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

安装

您可以通过 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;
    }
}

要创建账户,请使用方法 getAccountOrCreatecreateAccount

$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。