->lockForUpdate()
, проводите свои манипуляции/проверки, сейвите, комиттите транзакцию.DB::transaction(function () use (&$user) {
$user = User::whereKey($user->getKey())->lockForUpdate()->firstOrFail();
if ($user->balance) // blabla
$user->balance -= 100;
$user->save();
});