Как проверить только часть значения, которое я получаю через запрос на получение? - PullRequest
0 голосов
/ 26 мая 2019

Я хочу получить два значения из запроса get, а затем я буду использовать explode для извлечения каждого из них в отдельности.Однако это означает, что значение, которое я получаю перед использованием explode, не является уникальным для таблицы (так как это соединение, и, следовательно, это не существующее значение в таблице).Как использовать validate, чтобы избежать дублирования?

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

public function store(Request $request)
    {
        $this->validate($request, [
            'idProduit' => 'unique:stocks', 
            'produit' => 'required|unique:stocks',
            'quantite' => 'required'
        ]);
        $produit = explode("|",$request->get('produit'));
        $stock = new Stock;
        $stock->idProduit = $produit[0];
        $stock->produit = $produit[1];
        $stock->quantite = $request->input('quantite');
        $stock->save();

        return redirect('/stocks/')->with('success', 'Entrée de stock ajoutée à la base de données');
    }

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

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Вы можете создать пользовательский класс правил проверки или использовать Validator https://laravel.com/docs/5.8/validation#custom-validation-rules.

Что-то вроде этого:

Validator::make($request->all(), [
    'quantite' => 'required',
    'produit' => [
        'required', 
        function ($attribute, $value, $fail) {
            $parts = explode('|', $value);

            if (!Stock::where('idProduit', $parts[0])->exists()) {
                $fail('idProduit already exists.');
            }

            if (!Stock::where('produit', $parts[1])->exists()) {
                $fail('produit already exists.');
            }
        }
    ],
])->validate();
0 голосов
/ 26 мая 2019

Простой способ: взорвать до проверки и создать новый $request с еще 2 полями. Thats Over !!

public function store(Request $request)
{
    $produit = explode("|",$request->get('produit'));
    $request->request->add(['idProduit' => $produit[0]]);
    $request->request->add(['produit' => $produit[1]]);

    $this->validate($request, [
        'idProduit' => 'unique:stocks', 
        'produit' => 'required|unique:stocks',
        'quantite' => 'required'
    ]);

    $stock = new Stock;
    $stock->idProduit = $produit[0];
    $stock->produit = $produit[1];
    $stock->quantite = $request->input('quantite');
    $stock->save();

    return redirect('/stocks/')->with('success', 'Entrée de stock ajoutée à la base de données');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...