You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9中使用Postman提交POST数据至数据库的结果异常问题

问题:Laravel 9中form-data提交POST请求返回JSON结构不符合预期

我在Laravel 9中通过Postman以form-data格式向数据库提交POST数据,期望返回指定结构的JSON结果,但实际返回结果与预期不符。

控制器代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\M_Barang;

class Utama extends Controller
{
    public function index() {
        return view('Utama');
    }
    
    public function store(Request $request) {
        $this->validate($request, [
            'file' => 'required|max:2048'
        ]);
        $file = $request->file('file');
        $nama_file = time()."_".$file->getClientOriginalName();
        $tujuan_upload = 'data_file';
        if ($file->move($tujuan_upload,$nama_file)) {
            $data = M_Barang::create([
                'nama_produk' => $request->nama_produk,
                'harga' => $request->harga,
                'gambar' => $nama_file
            ]);
            $res['message'] = "succsess!";
            $res['values'] = $data;
            return response($res);
        }
    }
}

实际返回结果

实际返回结果

预期返回结果

预期返回结果


问题分析与修复方案

1. 核心问题点

  • 直接返回模型实例导致响应结构不符合预期,会携带额外属性
  • 存在拼写错误:succsess应为success
  • 未对nama_produk和harga做必填验证,数据完整性无法保障
  • 文件移动失败时无返回逻辑,会导致请求无响应

2. 修改后的控制器代码

public function store(Request $request) {
    // 新增字段验证,确保提交数据完整合规
    $this->validate($request, [
        'file' => 'required|max:2048',
        'nama_produk' => 'required|string',
        'harga' => 'required|numeric'
    ]);
    
    $file = $request->file('file');
    $nama_file = time() . "_" . $file->getClientOriginalName();
    $tujuan_upload = 'data_file';
    
    if ($file->move($tujuan_upload, $nama_file)) {
        $data = M_Barang::create([
            'nama_produk' => $request->nama_produk,
            'harga' => $request->harga,
            'gambar' => $nama_file
        ]);
        
        // 构建完全匹配预期的响应结构
        return response()->json([
            'message' => "success!",
            'values' => [
                'id' => $data->id,
                'nama_produk' => $data->nama_produk,
                'harga' => $data->harga,
                'gambar' => $data->gambar,
                'created_at' => $data->created_at->toDateTimeString(),
                'updated_at' => $data->updated_at->toDateTimeString()
            ]
        ], 201); // 用201状态码表示资源创建成功
    }
    
    // 文件上传失败时返回错误响应
    return response()->json([
        'message' => "文件上传失败"
    ], 400);
}

3. 额外检查项

  • 确保M_Barang模型中已将字段加入$fillable,避免批量赋值报错:
    class M_Barang extends \Illuminate\Database\Eloquent\Model
    {
        protected $fillable = ['nama_produk', 'harga', 'gambar'];
    }
    
  • 确认data_file目录存在且拥有写入权限,否则文件无法移动
  • Postman请求时核对form-data字段名,确保与代码中的file、nama_produk、harga完全一致

内容的提问来源于stack exchange,提问作者ZACK LAVIEV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:25:36