رافق مجتهدزاده
2 سال پیش توسط رافق مجتهدزاده مطرح شد
3 پاسخ

مشکل اعتبارسنجی متغیر منحصربفرد زمانیکه قصد آپدیت داریم

سلام
من یک جدول ساده teachers دارم. می خوام اطلاعات معلم موجود در این جدول رو ویرایش کنم. هر معلم یک "کد ملی" منحصر بفرد داره. زمان آپدیت خطا می گیره که این کد ملی قبلا ثبت شده.
من به سایت لاراول به آدرس https://laravel.com/docs/9.x/validation#rule-unique مراجعه کردم. طبق توضیحات اونجا قوانین زیر رو نوشتم. اما باز هم خطا می ده و اجازه به روزرسانی رو نمی ده.
ممنون می شم راهنماییم کنید.
کدی که در اعتبارسنجی نوشتم:

public function rules()
    {
        return [
            'name'=>'required|max:255',
            'lastName' => 'required|max:255',
            'melliCode'=>['required','digits:10',Rule::unique('teachers','melliCode')->ignore($this->melliCode)],
            'tell'=>'digits:10',
            'percentage'=>'digits_between:0,100|required',
        ];
    }

ضمنا Rule رو هم use کردم.


ثبت پرسش جدید
حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 2 سال پیش آپدیت شد
1

سلام

 'melliCode'=>['required','digits:10',Rule::unique('teachers','melliCode')->ignore($this->teacher)],

شما در متد ignore باید اسم پارامتری که در روت استفاده کردید رو نام ببرید
ببینید

Route::patch('teachers/{teacher}', [TeachersController::class, 'update']);

و شکل متدش

 public function update(Request $request, Teacher $teacher)
    {

    }

رافق مجتهدزاده
تخصص : برنامه نویسی php
@rafig 2 سال پیش مطرح شد
0

ممنون
با تغییر دادن همون یک عبارت از mellicode به teacher مشکل حل شد.
البته من روت رو با resource نوشتم و خودم نفهمیدم عبارت teacher از کجا اومد. با اینکه مشکلم حل شده اما اگر بیشتر راهنمایی کنید ممنون می شم.
روت من:

Route::resource('/dashboard/teachers',TeacherController::class)->middleware(['auth']);

و ولیدیشن رو هم با یک ریکوئست اختصاصی نوشتم که کد تغییر یافته اش که کار می کنه اینجا هست:

public function rules()
    {
        return [
            'name'=>'required|max:255',
            'lastName' => 'required|max:255',
            'melliCode'=>['required','digits:10',Rule::unique('teachers','melliCode')->ignore($this->teacher)],
            'tell'=>'digits:10',
            'percentage'=>'digits_between:0,100|required',
        ];
    }

که به خاطر ریکوئست جدید کنترلرم هم به این شکل هست:

public function update(teacherRequest $request, Teacher $teacher)
    {

}

حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 2 سال پیش مطرح شد
1

بله درسته در روتهای resource اسم پارامترو لاراول اتومات تولید میکنه برای روتی که شما تعریف کردید اسم پارامترش میشهteacher یعنیsآخری حذف میشه به صورت مفرد میاد
اگر هم اسم پارامتر تو روتی رو نمیدونید دستور ارتیزان route:list رو بزنید و دنبال روتتون بگردید تا بهتون نشون بده که اسم پارامتر روتهای resource چی نامگذاری شده


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

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