ببعض الأحيان نحتاج كي نتحقق أن القيمة المدخلة غير مسجلة في قاعدة البيانات، مثلا البريد الإلكتروني، رقم الهاتف.... للقيام بذلك يمكن إستخدام unique يضاف اليها اسم الجدول الذي يحتوي على القيمة.
مثلا إذا كان لدي جدول admins يوجد به حقل email وأريد التحقق ان الـ email لا يتكرر إستخدم ما يلي:
public function store(Request $request) { $request->validate([ 'email'=>'required|unique:admins', ]); $admin=new Admin(); $admin->email=$request->email; $admin->save(); }
وإذا كان البريد الإلكتروني مسجل مسبقا، سوف أحصل على الخطأ التالي:
لكن ماذا لو كان إسم الـ input يختلف عن إسم الحقل في قاعدة البيانات
مثلا إسم input = email وإسم الحقل person_email هنا يجب إضافة إسم الـ input إلى الجدول في التحقق
لو كان لدي الفورم التالي
<form action="{{route('validation.store')}}" method="POST"> @csrf <div class="container"> @error('person_email') <div class="alert alert-danger">{{$message}}</div> @enderror <div class="mb-3"> <input type="email" class="form-control" value="{{ old('email') }}" name="email" placeholder="Please Enter Email"> </div> <button type="submit" class="btn btn-primary">Add</button> </div> </form>
وكان لدي الجدول التالي
للتحقق إستخدم الكود التالي ، حيث يجب إضافة إسم input إلى إسم الجدول يفصل بينهما فاصلة.
$request->validate([ 'person_email'=>'required|unique:admins,email', ]);
السؤال، كيف إستخدم ذلك في التعديل
بما أنه في التعديل سيعاد إدخال نفس القيمة، فإن ذلك سوف يتسبب في خطأ ولن تقبل عملية validation تمرير البيانات.
لحل ذلك نستخدم skip حسب id، نضيف دالة جديده إلى عملية التحقق وهي id ويمكن الحصول على id بطريقتين:-
في هذا المثال سوف أستخدم segment.
$request->validate([ 'name'=>'required|unique:admins,'.request()->segment(3).'.id', ]);
علي حسن
لو عملت ال request او ال validate مفصول كيف راح ينكت الكود