Wallet logo Wallet

Переводы

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

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


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

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

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

class User extends Model implements Wallet
{
    use HasWallet;
}

Перевод

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

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

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

$first->balance; // int(100)
$last->balance; // int(0)

Сделаем перевод от первого второму.

$first->transfer($second, 5); 
$first->balance; // int(95)
$second->balance; // int(5)

Заставить перевести.

Операция необходима, если в вашей системе разрешено уходить в минус.

$first->balance; // int(100)
$last->balance; // int(0)

Сделаем перевод от первого второму.

$first->forceTransfer($second, 500); 
$first->balance; // int(-400)
$second->balance; // int(500)

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