Laravel:正确保存后返回重定向抛出 SQLSTATE [23000]:完整性约束违规
Posted
技术标签:
【中文标题】Laravel:正确保存后返回重定向抛出 SQLSTATE [23000]:完整性约束违规【英文标题】:Laravel: return redirect after saving correctly throws SQLSTATE[23000]: Integrity constraint violation 【发布时间】:2020-05-21 18:31:58 【问题描述】:我将 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');
产品控制器
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') ">
.
.
关于如何修复它的任何想法?
【问题讨论】:
【参考方案1】:是不是因为你声明了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');
【讨论】:
【参考方案2】:问题是否可能与 route::get 两次访问相同的 url 有关?
所以我想它想在第一次存储产品后重定向到索引,它尝试存储另一个没有值的产品。
【讨论】:
以上是关于Laravel:正确保存后返回重定向抛出 SQLSTATE [23000]:完整性约束违规的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 8 Socialite Facebook 重定向不起作用/返回 null