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:插入productsnamepricedescriptionlong_descriptionupdated_atcreated_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 方法后,该方法需要一个包含nameprice and etc. 的请求。

由于您只是在没有传递任何参数的情况下进行了重定向,现在 laravel 将向您抛出一个错误,就像您在上面介绍的那样。

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

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

【讨论】:

【参考方案2】:

问题是否可能与 route::get 两次访问相同的 url 有关?

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

【讨论】:

以上是关于Laravel:正确保存后返回重定向抛出 SQLSTATE [23000]:完整性约束违规的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 - 升级身份验证后没有正确重定向

Laravel 8 Socialite Facebook 重定向不起作用/返回 null

在Wordpress上发布保存后更改重定向URL

Laravel 模态表单重定向返回,输入不起作用

如何将客人重定向到登录页面,在laravel 5.2登录后重定向回来[关闭]

成功操作后不会重定向到相同的分页(或页面)。 Laravel