Пользовательская проверка с использованием laravel 5.8 - PullRequest
0 голосов
/ 07 января 2020

Добрый день,

Я пытаюсь обновить данные бренда, используя Laravel 5.8, и я сделал пользовательскую функцию проверки для подтверждения названия бренда, но моя проблема заключается в том, что когда я пытаюсь выполнить обновление, проверка не удается, и я получаю сообщение: Opps name Is Exist Before

Мне нужно обновить эту функцию проверки, чтобы связать идентификатор бренда с именем бренда, чтобы выполнить обновление, не показывая ошибку проверки.

Спасибо в заранее.

Вот мой код:

public function update(Request $request, $id)
{
    //prepare data for validation
    request()->validate([
        'name'  => [
            'required',
            'min:2', // validate english name is exist before
            function ($attribute, $value, $fail) {
                $englishname=Brand::where(['name'=>$value,'deleted'=>1 ])->first();
                if(false !=$englishname) {
                    $fail('Opps '.$attribute.' Is Exist Before.');
                }
            },
        ],
        'keywords' => 'required|min:2',
        'ar_name'  => [
            'required',
            'min:2',// validate english name is exist before
            function ($attribute, $value, $fail) {
                $arname=Brand::where(['ar_name'=>$value,'deleted'=>1])->first();
                if(false !=$arname) {
                    $fail('Opps '.$attribute.' Is Exist Before.');
                }
            },
        ],
        'ar_keywords' => 'nullable',
        'status' => 'required|integer',
    ],[],[
        "name"=>"Brand Name",
        'keywords' => 'Brand KeyWords',
        'ar_name' => 'اسم الماركة',
        'ar_keywords' => 'الكلمات الدليلية',

    ]);
    // start pass data to model
    $branddata=array(
        'name'          =>$request->name,
        'keywords'      =>$request->keywords,
        'ar_name'       =>$request->ar_name,
        'ar_keywords'   =>$request->ar_keywords,
        'last_updated_by'=>auth()->user()->id,
        'status'        =>$request->status,
    );

    //start update data
    $updateddata=Brand::where(['id'=>$id,'deleted'=>1])->update($branddata);
    if (false !==Brand::create($updateddata))
    {
        return redirect(route("brand.edit"))->with("messageSuccess","Brand Updated  Successfully");

    }else{
        return redirect(route("brand.edit"))->with("messageSuccess","Brand Updated Successfully");

    }


}

1 Ответ

0 голосов
/ 08 января 2020

Вы можете использовать уникальное правило проверки из Laravel с расширенными атрибутами, переданными для проверок проверки.

Если вы хотите проверить, что атрибут name должен быть уникальным ( но допускает тот же экземпляр модели), вы можете сделать что-то вроде следующего:

'name' => "required|string|email|unique:<table name for the Brand::class>,name,{$id}"

Это правило проверки будет проверять уникальность предоставленного name для всех строк, кроме той, в которой $id является его первичный ключ.

Если ваша переменная $id не является первичным ключом, вы можете указать имя столбца для переменной следующим образом:

'name' => "required|string|email|unique:<table name for the Brand::class>,name,{$id},<column name of the id>"
...