Laravel: возврат перенаправления после сохранения корректно выдает SQLSTATE [23000]: нарушение ограничения целостности - PullRequest
0 голосов
/ 05 февраля 2020

Я использую Laravel 6.11 с MAMP и после правильного сохранения формы данных в моей таблице базы данных я получил следующую ошибку:

SQLSTATE [23000]: Нарушение ограничения целостности: 1048 Столбец ' имя 'не может быть пустым (SQL: вставить в products (name, price, description, long_description, updated_at, created_at) значения (?,?,?,?, 2020-02-05 19:00:35, 2020-02-05 19:00:35)) http://localhost: 8000 / admin / products

Маршруты

Route::get('/admin/products', 'ProductController@index'); 
Route::get('/admin/products/create', 'ProductController@create');
Route::get('/admin/products', 'ProductController@store');

ProductController

public function create()
{
    return view('admin.products.create');
}

public function store(Request $request)
{
    $product = new Product();
    $product->name = $request->input('name');
    $product->price = $request->input('price');
    $product->description = $request->input('description');
    $product->long_description = $request->input('long_description');
    $product->save(); //IT WORKS!! ALL DATA SAVED!!

    return redirect('/admin/products');
}

Create.blade

<form method="put" action="{{ url('/admin/products') }}">
.
.

Любые идеи по как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Это потому что вы объявили two the same routes. Это:

Route::get('/admin/products', 'ProductController@index');
Route::get('/admin/products', 'ProductController@store');

Теперь, когда эта строка выполнена redirect('/admin/products');, Laravel не будет вызывать первый определенный вами маршрут, который Route::get('/admin/products', 'ProductController@index');

, а будет вызывать последний маршрут, который вы определено, Route::get('/admin/products', 'ProductController@store');.

После вызова метода store в контроллере продукта, метод ожидает запрос, который включает name, price and etc..

Поскольку вы только что перенаправили только без передачи аргумента, теперь laravel выдаст вам ошибку, подобную той, что вы представили выше.

Чтобы решить эту проблему, измените свой второй метод маршрута на ProductController@store. Как это

Route::post('/admin/products', 'ProductController@store');
1 голос
/ 05 февраля 2020

Возможно ли, что проблема связана с тем, что route :: дважды попадают на один и тот же URL?

Итак, я полагаю, что он хочет перенаправить на индекс после первого хранения продукта, он пытается сохранить другой продукт без значений.

...