Я хочу сделать некоторую проверку для поля. Прямо сейчас работает для уникальных значений, проблема в том, что при обновлении я получаю ту же ошибку. Итак, я хочу отфильтровать запрос, если этот почтовый запрос содержит поле ID
, то это поле не должно быть уникальным.
public function rules()
{
return [
'customer_id' => 'required|unique:customers',
];
}
Вы можете использовать уникальный метод класса Rule для метода обновления.
public function rules()
{
return [
'customer_id' => [
'required',
Rule::unique('customers')->ignore($customer->customer_id),
];
}
Документы Laravel: https://laravel.com/docs/8.x/validation#rule-unique
Для функции common rules() это можно сделать как
use Illuminate\Validation\Rule;
class CustomerController extends Controller
{
protected function rules($customer)
{
return [
'customer_id' => [
'required',
Rule::unique('customers')->ignore($customer->exists ? $customer->customer_id : null),
];
}
public function store(Request $request)
{
$customer = new Customer;
$request->validate($this->rules($customer));
}
public function update(Request $request, Customer $customer)
{
$request->validate($this->rules($customer);
}
}
В моем случае у меня есть единственный метод для сохранения/обновления, и я проверяю, есть ли у меня идентификатор или нет. Также я добавил $customer = request()->all(); и ignore($customer['ID'] , это для моего конкретного случая.
Laravel Docs предостерегает от передачи ввода запроса пользовательского контроллера в метод ignore
Для вашего конкретного случая вы можете сделать
$customer = !empty($request->input('ID') ? Customer::findOrFail($request->input('ID')) : new Customer;
//Then pass the customer to the rules()
$validated = $request->validate($this->rules($customer));
В документах @Beusebiu говорится, что «вы никогда не должны передавать какие-либо входные данные запроса, контролируемого пользователем, в метод игнорирования». Обновили ответ, чтобы справиться с вашим конкретным случаем
В моем случае у меня есть единственный метод для сохранения/обновления, и я проверяю, есть ли у меня идентификатор или нет. Также я добавил $customer = request()->all(); и ignore($customer['ID'] , это для моего конкретного случая. Спасибо!