laravel-wallet maintained by centrex
Add wallet functionality to Laravel applications
Polymorphic digital wallet for any Eloquent model. Supports multiple wallet types per user, balance increments/decrements, and an immutable ledger of all transactions.
Installation
composer require centrex/laravel-wallet
php artisan vendor:publish --tag="laravel-wallet-migrations"
php artisan migrate
Usage
1. Add the trait to your model
use Centrex\Wallet\Traits\HasWallet;
class User extends Authenticatable
{
use HasWallet;
}
A default wallet is created automatically when the model is created.
2. Access wallets
// All wallets for this user
$user->wallets;
// Specific wallet by type ID
$wallet = $user->wallet(WalletType::DEFAULT->value);
echo $wallet->balance;
3. Credit and debit
// Credit by amount
$wallet->incrementBalance(500.00);
// Debit by amount
$wallet->decrementBalance(200.00);
// Credit via a WalletTransaction model (links transaction to ledger entry)
$wallet->incrementBalance($transaction);
$wallet->decrementBalance($transaction);
4. Ledger
Every balance change is recorded in wallet_ledgers with the transaction reference and running balance:
$wallet->walletLedgers;
// → collection of WalletLedger with: amount, running_raw_balance, transaction_id, transaction_type
Wallet types
use Centrex\Wallet\Enums\WalletType;
WalletType::DEFAULT // value: 1
WalletType::TEMPORAY // value: 2
Cleanup on delete
When the parent model is deleted, all its wallets are automatically deleted via the deleting boot hook.
Testing
composer test # full suite
composer test:unit # pest only
composer test:types # phpstan
composer lint # pint
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
License
The MIT License (MIT). Please see License File for more information.