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

تحديث نموذج Laravel بقاعدة التحقق الفريدة

Mahmoud Alrashidi

السؤال

لدي نموذج مستخدم 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()
    ));
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

استخدم القاعدة الآتية لاستثناء المستخدم الحالي:

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

واستدعاء نموذج القاعدة من خلال:

use Illuminate\Validation\Rule;

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...