سلام دوستان
من میخوام کاربران موقع ثبت نام یه کد عضویت عددی هم داشته باشن و توی تیبل کاربران ذخیره بشه
برای اینکار از کد زیر استفاده کردم:
public function generateApplicantId()
{
$candidatesData = User::pluck('applicant_id')->toArray();
do {
$applicant_id = random_int(1000000000, 9999999999);
} while (in_array($applicant_id, $candidatesData));
return $applicant_id;
}
ولی وقتی تعداد کاربران زیاد میشه زمان پردازشی زیادی رو میطلبه تا عمل بررسی یونیک بودن رو انجام بده
ضمنا نمیخوام ازتابع کمکی strpad استفاده کنم و id کاربر رو با تعدادی 0 پشت سرش قرار بدیم چون نیاز داریم عدد تولید شده بصورت افزایشی نباشه
میخواستم بدونم راهکار بهتری کسی سراغ داره ؟
سلام.
چرا همه کد های ایجاد شده رو دریافت میکنید بعد با in_array چک میکنید که این کد وجود دارد؟
خوب روش بهتر این است همین کار را با کوئری ساده select انجام دهید. اگر این کد وجود داشت که یعنی کد تکراری است و اگر نبود یعنی کد جدید شما یکتا است.
شانس رخ دادن چنین چیزی البته 1 به 1000000000 است. ولی باز هم به این صورت چک کنید خیلی سریع برنامه اجرا می شود.
سلام هادی عزیز
دقیقا به همون شکلی که شما اشاره کردین تغییر دادم ولی من بیشتر هدفم این بود که تحت هر شرایطی فقط و فقط یک کوئری به بانک زده بشه
که فکر میکنم با این حالت اتفاقا همون یک کوئری در بدبینانه ترین حالتش زده میشه
شاید پاسخ شما همینجا باشد
کاملا درسته
ممنونم ازتون