Wallet logo Wallet

Переводы между кошельками

Перевод осуществляется с помощью операций Deposit и Withdraw.

Обычно операции делают вывод из "неоткуда" в "некуда", но в данном случае операцию подписывает таблица transfers.


Пользователь

Проготовим модель, добавив HasWallet, HasWallets trait's и Wallet interface.

use Bavix\Wallet\Traits\HasWallet;
use Bavix\Wallet\Traits\HasWallets;
use Bavix\Wallet\Interfaces\Wallet;

class User extends Model implements Wallet
{
    use HasWallet, HasWallets;
}

Сделаем перевод

Найдем пользователей.

$first = User::first(); 
$last = User::orderBy('id', 'desc')->first(); // last user
$first->getKey() !== $last->getKey(); // true

Создадим пользователям кошельки.

$name = 'New Wallet';
$firstWallet = $first->createWallet(compact('name'));
$secondWallet = $second->createWallet(compact('name'));

$firstWallet->deposit(100);
$firstWallet->balance; // int(100)
$secondWallet->balance; // int(0)

Выполним перевод от первого второму.

$firstWallet->transfer($secondWallet, 5); 
$firstWallet->balance; // int(95)
$secondWallet->balance; // int(5)

Принудительный перевод

Проверим баланс.

$firstWallet->balance; // int(100)
$lastWallet->balance; // int(0)

Выполним перевод от первого второму.

$firstWallet->forceTransfer($secondWallet, 500); 
$firstWallet->balance; // int(-400)
$secondWallet->balance; // int(500)

Просто работает!