راکت
حل شده

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

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 کردم.

ثبت پرسش جدید

پاسخ‌ها

3
حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

بهترین پاسخ

سلام

 '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)
    {

    }
رافق مجتهدزاده
رافق مجتهدزاده
@rafig

تخصص: برنامه نویسی php

ممنون
با تغییر دادن همون یک عبارت از 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)
    {

}
حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

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

شاید پاسخ شما همین‌جا باشد

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

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