Как заблокировать таблицу перед запуском вставки в Laravel eloquent - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть таблица «переходов» для отслеживания перевода суммы от пользователя A к пользователю B.

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(10)     | NO   | PRI | NULL    |       |
| sender   | int(10)     | NO   |     | NULL    |       |
| amount   | int(10)     | NO   |     | NULL    |       |
| receiver | int(10)     | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

Перед каждой новой вставкой в ​​эту таблицу мне нужно проверять, достаточно ли у отправителя достаточного баланса.

Вот таблица "users"

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(10)     | NO   | PRI | NULL    |       |
| name     | varchar(100)| NO   |     | NULL    |       |
| balance  | int(10)     | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

Как реализовать здесь блокировку, чтобы пользовательский баланс не уменьшался другими методами после прохождения проверки баланса.

public function store(Transfer $transfer, TransferRequest $request)
{
    $transfer->isAllowed($request); // Will abort if users balance is low

     //what if the users balance gets reduced by some other request here !!

    $transfer->fill($request->all())->save();

    return redirect()->route('transfers.index')->withStatus(__('Transfer successfully created.'));
}

1 Ответ

0 голосов
/ 24 февраля 2020

вы можете использовать sharedLock или lockForUpdate метод в laravel документации https://laravel.com/docs/5.2/queries#pessimistic -locking

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...