where('phone', $phone)->first(); if ($existing) { return $existing; } return $this->createWithUniqueCode($phone); } private function createWithUniqueCode(string $phone): Coupon { for ($attempt = 0; $attempt < 10; $attempt++) { try { return Coupon::query()->create([ 'phone' => $phone, 'code' => $this->generateCouponCode(), ]); } catch (UniqueConstraintViolationException) { continue; } } throw new \RuntimeException('Unable to generate a unique coupon code.'); } private function generateCouponCode(): string { $x = random_int(1, 9); $yyyy = Str::upper(Str::random(4)); return "{$x}_{$yyyy}"; } }