سلام و خسته نباشید. من از لاراول استفاده میکنم و کدهای مربوط به OTP موبایل رو به شکل زیر نوشتم :
public function sendMobileVerify()
{
if(request('mobile',null) ){
if(preg_match("/^00989[0-9]{9}$/", request('mobile',null))) { //00989123456789
$sms_verify_code = rand(1000,999999);
$user = User::findOrFail(Auth::id());
$user->mobile = request('mobile',null);
$user->mobile_verify = 'false|'.$sms_verify_code.'|'.date('Y-m-d');
$user->save();
// sendSMS([$user->mobile],'کد فعال سازی شما :'.$sms_verify_code);
sendSmsPattern([$user->mobile],['verification-code'=>$sms_verify_code]);
//return response()->json(['success'=>true,'message'=>'کد تایید برای شما پیامک شد' , 'data'=>['code'=>$sms_verify_code] ]);
return response()->json(['success'=>true,'message'=>'کد تایید برای شما پیامک شد' , 'data'=>[] ]);
}else{
return response()->json(unsuccess_message(['message'=>'اطلاعات ارسالی معتبر نیست','errors'=>['title'=>'اطلاعات ارسالی معتبر نیست']],99999999),422);
}
}else{
return response()->json(unsuccess_message(['message'=>'اطلاعات ارسالی کافی نیست.','errors'=>['title'=>'اطلاعات ارسالی کافی نیست.']],99999999),422);
}
}
همونطور که از کد بالا مشخصه ، این کد یک عددی رو به موبایل کاربر میفرسته.
که در این بخش مشکلی ندارم .
اما مشکلم اینجاست که وقتی کاربر شماره موبایل تکراری وارد میکنه ، میده. من اومدم فیلد موبایل رو در Mysql و Migrate لاراول بصورت یونیک تعریف کردم .
"message": "SQLSTATE\[23000\]: Integrity constraint violation: 1062 Duplicate entry '0000000' for key 'mobile' (SQL: update users set mobile = 0000000, mobileverify = false|890183|2021-02-04, users.updatedat = 2021-02-04 12:39:06 where id = 114)",
چکار کنم بجای این ارور ، به کاربرم بگه شماره موبایل تکراری است ؟ دیگه این ارور رو بهش نشون نده .
یا بهتره بگم ، چکار کنم که داده تکراری در فیلد mobile در دیتابیسم ثبت نشه . با تشکر از دوستان
@h.taghipour2012
سلام باید تو validation متود یا فایل request یونیک بودن فیلد رو چک کنی به صورت زیر
'mobile' => [ 'required', 'unique:user,mobile']
اینجا توضیح داده
اینم لینک سایت لاراول
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟