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');
。
在产品控制器中调用存储方法后,该方法需要一个包含 name
、price and etc.
的请求。
因为你只是重定向而没有传递任何参数,现在 laravel 会抛出一个错误,就像你上面提到的那样。
要解决这个问题,请更改 ProductController@store
的第二种路由方法。像这样
Route::post('/admin/products', 'ProductController@store');
我将 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');
。
在产品控制器中调用存储方法后,该方法需要一个包含 name
、price and etc.
的请求。
因为你只是重定向而没有传递任何参数,现在 laravel 会抛出一个错误,就像你上面提到的那样。
要解决这个问题,请更改 ProductController@store
的第二种路由方法。像这样
Route::post('/admin/products', 'ProductController@store');