Уникальная проверка Laravel, если идентификатор не запрашивается

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

public function rules()
{
    return [
        'customer_id' => 'required|unique:customers',
    ];
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
1 126
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать уникальный метод класса 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));

В моем случае у меня есть единственный метод для сохранения/обновления, и я проверяю, есть ли у меня идентификатор или нет. Также я добавил $customer = request()->all(); и ignore($customer['ID'] , это для моего конкретного случая. Спасибо!

Beusebiu 11.12.2020 08:17

В документах @Beusebiu говорится, что «вы никогда не должны передавать какие-либо входные данные запроса, контролируемого пользователем, в метод игнорирования». Обновили ответ, чтобы справиться с вашим конкретным случаем

Donkarnash 11.12.2020 08:29

Другие вопросы по теме