Laravel игнорировать уникальную проверку при обновлении - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть модель, которая содержит много внешних ключей. Один из этих внешних ключей должен иметь уникальное значение.

Мои правила проверки следующие:

$data['rules'] = [
    'address' => 'required|string',
    'buyer_id' => 'required|exists:buyers,id',
    'buyer_name' => 'required|string',
    'date' => 'required|date',
    'email' => 'required|email',
    'identification_photo' => 'required|string',
    'invoice' => 'string|required',
    'middleman_id' => 'nullable|exists:middlemen,id',
    'price' => 'required|numeric|between:1,99999999999999999999999999.9999',
    'property_id' => 'required|exists:properties,id|unique:reservations,property_id',
    'purchase_receipt' => 'required|string',
    'rfc' => array(
        'required',
        'regex:/^([A-Z,Ñ,&]{3,4}([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[A-Z|\d]{3})$/'
    ),
    'tier_id' => 'nullable|exists:tiers,id',
    'user_id' => 'required|exists:users,id',
];

У меня проблема с property_id . Это должно быть уникальным в текущей таблице, которая является резервированием.

Чтобы игнорировать эту проверку при обновлении, я добавляю эту строку кода перед вызовом Validator: $book['rules']['property_id'] .= ",{$item->property_id}";

И когда я выполняю Log::info всех своих правил, я получаю следующую строку: 'property_id' => 'required|exists:properties,id|unique:reservations,property_id,4',

Но я продолжаю получать сообщение об ошибке. Я что-то не так делаю?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Я думаю, что строка кода, которую вы ищете, это

'property_id' => 'required|exists:properties,id|unique:reservations,property_id,'.$request->id',

Это игнорирует текущую строку, которую вы обновляете, а также проверяет ваш property_id

0 голосов
/ 04 ноября 2018

Ошибка в этой строке:

$book['rules']['property_id'] .= ",{$item->property_id}";

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

$book['rules']['property_id'] .= ",{$item->id}";

При этом вы говорите, что для вашей Модели с id = x игнорируйте эту конкретную проверку. Чтобы лучше это понять, вы говорите, что для этой проверки игнорируйте проверку свойства только для записи с идентификатором, равным $item->id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...