drtrabit
3 سال پیش توسط drtrabit مطرح شد
1 پاسخ

جلوگیری از ارسال داده تکراری در لاراول

سلام و خسته نباشید. من از لاراول استفاده میکنم و کدهای مربوط به 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 در دیتابیسم ثبت نشه . با تشکر از دوستان


ثبت پرسش جدید
سینا خاقانی
تخصص : توسعه دهنده بک‌اند
@sina.it91 3 سال پیش آپدیت شد
2

@h.taghipour2012
سلام باید تو validation متود یا فایل request یونیک بودن فیلد رو چک کنی به صورت زیر

'mobile' => [ 'required', 'unique:user,mobile']

اینجا توضیح داده

اینم لینک سایت لاراول


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام