sugarufc
@sugarufc

Как перезаписать запись в БД если запись уже существует?

Есть список сотрудников. Каждый имеет уникальный IP адрес.
601a6b7ec3db0774963611.png
601a6b8d5d237232574406.png

При редактировании сотрудника (например изменении имени или номера телефона) запись не сохраняется, указывая на то, что такой ip уже существует (хотя ip не изменяли и он уникальный в БД), а мне нужно просто пересохранить этот же ip адрес
601a6c526437e992965434.png

вот action который обрабатывает сохранение записи в БД
public function update(Request $request, $id){
        $rules = [
            'vts' => 'numeric|nullable',
            'gts' => 'numeric|nullable',
            'mobile' => 'numeric|nullable',
            'ip_wks' => 'unique:workers|nullable',
            'ip_int' => 'unique:workers|nullable'
        ];

        $messages = [
            'vts.numeric' => 'Поле должно содержать только цифры',
            'gts.numeric' => 'Поле должно содержать только цифры',
            'mobile.numeric' => 'Поле должно содержать только цифры',
            'ip_wks.unique' => 'IP адрес уже существует',
            'ip_int.unique' => 'IP адрес уже существует',
        ];

        $validateData = Validator::make($request->all(), $rules, $messages)->validate();

        $worker = Worker::find($id);
        $worker->update($request->all());
        return redirect(session('links')[2])->with('success', 'Данные успешно сохранены');
    }
  • Вопрос задан
  • 160 просмотров
Решения вопроса 2
Fragster
@Fragster
помогло? отметь решением!
Что-то типа
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
///////
Validator::make($data, [
            'vts' => 'numeric|nullable',
            'gts' => 'numeric|nullable',
            'mobile' => 'numeric|nullable',
            'ip_wks' => Rule::unique('workers')->ignore($id)->nullable(),
            'ip_int' => Rule::unique('workers')->ignore($id)->nullable()
]);
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
Этот кейс даже в документации отдельным подразделом выделен:

Forcing A Unique Rule To Ignore A Given ID

Sometimes, you may wish to ignore a given ID during unique validation. For example, consider an "update profile" screen that includes the user's name, email address, and location. You will probably want to verify that the email address is unique. However, if the user only changes the name field and not the email field, you do not want a validation error to be thrown because the user is already the owner of the email address in question.

To instruct the validator to ignore the user's ID, we'll use the Rule class to fluently define the rule. In this example, we'll also specify the validation rules as an array instead of using the | character to delimit the rules:

Validator::make($data, [
    'email' => [
        'required',
        Rule::unique('users')->ignore($user->id),
    ],
]);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы