我们必须把数据发送到后端。后端给我们的结构,它可以接收数据。这是用PHP laravel接收数据的代码:
public function store(ProductRequest $request, UploadImageService $uploadImageService){
// dd($request->all());
$product = Product::create($request->validated());
if ($request->hasFile('image')) {
$uploadImageService->upload($product, 'image', 'product_images', true, false);
}
else{
return response()->json(['image must be file'],422);
}
if ($request->has('color_image')) {
$data=[];
foreach ($request->color_image as $key => $images) {
$data[]=$images;
}
/* dd($data); */
foreach ($data as $image) {
/* dd($image); */
$mediaItem = $product->addMedia($image)->toMediaCollection('products_images');
$mediaItem->setCustomProperty('color_id', $key);
$mediaItem->save();
}
}
/* dd('gfdd'); */
if ($request->filled('sizes')) {
$product->sizes()->sync($request->sizes);
}
if ($request->filled('categories')) {
$product->categories()->sync($request->categories);
}
if ($request->filled('genders')) {
$product->genders()->sync($request->genders);
}
if ($request->filled('colors')) {
$colors = $request->colors;
if ($product->colors()->count() > 0) {
for ($i = 0; $i < count($colors['color_id']); $i++) {
$product->colors()->attach($colors['color_id'][$i], [ 'stock' => $colors['stock'][$i]]);
}
} else {
$product->colors()->detach();
// dd(count($colors['color_id']));
for ($i = 0; $i < count($colors['color_id']); $i++) {
$product->colors()->attach($colors['color_id'][$i], [ 'stock' => $colors['stock'][$i]]);
}
}
}
if ($request->filled('materials')) {
$product->materials()->sync($request->materials);
}
return $this->successResponse($product);
}
下面是react中我们发布数据的代码。当我们console.log数据时,它准确地给出了后端想要的结构。在 Postman 一切正常,但当我们点击发送按钮,它返回“500内部服务器错误”和后端无法接收数据。
const colors = { 'color_id[]': [...arrColorId], stock: [...arrColorStock] };
req.append("colors", JSON.stringify(colors));
dispatch(saveNewProduct(req));
这是后端开发人员告诉我的数据应该是:
array:2 [ // app/Http/Controllers/Back/ProductController.php:60
"color_id" => array:1 [
0 => "1"
]
"stock" => "21"
]
我们的代码在登录时就是这样的
1条答案
按热度按时间hzbexzde1#
我认为错误是当你创建一个包含图像对象的验证数组的产品时,这意味着数据库会给你一个错误,因为你试图将不支持的数据类型插入数据库。尝试先上传图像,然后将其在验证数组中的值替换为上传的路径,如下所示:
如果这不起作用,那么尝试将异常的堆栈跟踪粘贴到laravel日志中