اذهب إلى المحتوى

السؤال

نشر

لدي نموذج مستخدم Laravel يحتوي على قاعدة تحقق فريدة من نوعها على اسم المستخدم والبريد الإلكتروني. عندما أقوم بتحديث النموذج ، أقوم بإعادة التحقق من الحقول ، حتى لا توجد مشكلة في التحقق من صحة القاعدة المطلوبة:

$request->validate([
  'name'  => ['required', 'string', 'max:255'],
  'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'],
  'username' => ['required', 'string', 'alpha_dash', 'max:190', 'unique:users,username'],
]);

لكن يأتيني الخطأ:

The username has already been taken.
The email has already been taken.

هل هناك طريقة لإصلاح هذا؟

Recommended Posts

  • 0
نشر

أثناء عملية التحديث تحتاج إلى تجاهل السجل الحالي الذي تقوم بتحديثه بخصوص القاعدة unique حتى لا يتم إحتسابه و ذلك من خلال إضافة مُعرف السجل للقاعدة بهذا الشكل:

$request->validate([
  'name'  => ['required', 'string', 'max:255'],
  'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email,' . $user->id],
  'username' => ['required', 'string', 'alpha_dash', 'max:190', 'unique:users,username,' . $user->id],
]);

او بهذا الشكل:

$request->validate([
  'name'  => ['required', 'string', 'max:255'],
  'email' => ['required', 'string', 'email', 'max:255', Rule::unique('users','email')->ignore($user->id)],
  'username' => ['required', 'string', 'alpha_dash', 'max:190', Rule::unique('users','username')->ignore($user->id)],
]);

و الآن ستتمكن من تطبيق القاعدة unique بدون أية مشاكل أثناء التحديث.

  • 0
نشر

يمكنك اتباع القاعدة التالية في تحديث النموذج و هي تجاهل السجل الذي تود تحديثه بإضافة معرف السجل إلى التحقق 

'email' => 'sometimes|required|email|unique:users,' . $id

وفي حالة الكود الخاص بك يصبح هكذا 

'email' => ['required', 'string', 'email', 'max:255', Rule::unique('users','email')->ignore($user->id)],

وهذا ينطبق ايضا على حقل username بنفس الشكل.

إذا كنت تستخدم rules في التحقق يمكنك إضافة المعرف بهذا الشكل للحقل.

$input = Input::all();
$rules = User::$rules['edit'];


$rules['email'] .= ',' . $user->id;  // هنا

$validator = Validator::make($input, $rules);

if ($validator->fails()) {
    return Response::json(array(
        'error' => $validator->messages()
    ));
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...