Laravel:return 正确保存后重定向抛出 SQLSTATE[23000]:违反完整性约束

Laravel: return redirect after saving correctly throws SQLSTATE[23000]: Integrity constraint violation

我将 Laravel 6.11 与 MAMP 一起使用,在将正确的数据形式保存到我的数据库后 table 我收到以下错误。

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null (SQL: insert into products (name, price, description, long_description, updated_at, created_at) values (?, ?, ?, ?, 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') }}">
.
.

关于如何修复它的任何想法?

问题是否可能与 route::get 与同一个 url 两次有关?

所以我想它想在第一次存储产品后重定向到索引,它会尝试存储另一个没有值的产品。

是不是因为你声明了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');

在产品控制器中调用存储方法后,该方法需要一个包含 nameprice and etc. 的请求。

因为你只是重定向而没有传递任何参数,现在 laravel 会抛出一个错误,就像你上面提到的那样。

要解决这个问题,请更改 ProductController@store 的第二种路由方法。像这样

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