Laravel обновить только измененные атрибуты полей - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь запустить эту функцию обновления в моем laravel контроллере. Здесь мое доменное имя является уникальным атрибутом.

Проблема

Но теперь каждый раз, когда я пытаюсь обновить любое поле, а не поле доменного имени, оно показывает мне ошибка, говоря доменное имя уже существует. Так как же я могу обновить только те поля, которые были изменены? какие изменения мне нужно внести в следующую функцию.

public function update(Request $request,Website $app, $id)
    {
        $this->validate($request, [
            'subDomainName' => ['required'],
            'subDomainSuffix' =>['required'], 
            'packageType'=>['required'],
            'themeid'=>['required'],
            'lang'=>['required'],
            'user'=>['required'],
            'domain' => ['required', 'string','min:2', 'max:255','unique:apps'],
        ],$request->all());

        $fullDomain = $request->domain;
        $app->domain=$fullDomain;
        Website::find($id)->update($request->all());
        return redirect()->route('customers.index')
                        ->with('success','Website updated successfully');
    }

1 Ответ

1 голос
/ 31 марта 2020

Вы можете указать модель, которую нужно игнорировать для уникального атрибута:

public function update(Request $request, Website $websiteModel, int $id)
{
    $website = $websiteModel->find($id);

    $this->validate($request, [
        'subDomainName' => ['required'],
        'subDomainSuffix' => ['required'], 
        'packageType' => ['required'],
        'themeid' => ['required'],
        'lang' => ['required'],
        'user' => ['required'],
        'domain' => [
            'required',
            'string',
            'min:2',
            'max:255',
            Rule::unique('apps')->ignore($website)
         ],
    ], $request->all());

    $website->update($request->all());

    return redirect()
        ->route('customers.index')
        ->with('success','Website updated successfully');
}

Не забудьте импортировать Rule: use Illuminate\Validation\Rule;

...