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

Laravel项目编辑表单传递外键client_id报错求助

解决编辑项目时client_id传递的整数格式错误问题

错误原因分析

报错Incorrect integer value: '[{"client_id":14}]' for column 'client_id' at row 1的核心问题:

  • 控制器中使用Project::select('client_id')->where('id',$project->id)->get()返回的是Eloquent集合,而非单个整数。在视图中输出时,集合会被转换为JSON字符串,数据库无法将该字符串识别为合法的整数值。
  • 额外问题:编辑表单的action绑定了project.store路由(这是创建新项目的路由),不符合编辑更新的RESTful规范,且缺少PUT请求伪装。

修复步骤

1. 简化控制器中client_id的获取逻辑

已经通过路由模型绑定拿到了$project实例,直接从实例中读取client_id即可,无需重复查询数据库:

public function edit(Project $project)
{
    // 直接从已加载的模型实例获取client_id,无需额外查询
    return view('project.edit', compact('project'));
}

2. 修正视图表单配置

  • 将表单action改为编辑更新的路由,添加PUT请求伪装(Laravel需要通过POST表单伪装PUT/PATCH请求)
  • 直接使用$project->client_id填充隐藏字段,确保输出整数:
<div class="row mt-3">
    <div class="col-12 col-md-6 namelabel">
        <form action="{{route('project.update', $project)}}" method="post" enctype="multipart/form-data">
            @csrf
            @method('PUT') {{-- 添加PUT请求伪装 --}}
            <div class="mb-3">
                <input type="hidden" class="form-control" name="client_id" value="{{$project->client_id}}" >
            </div>
            <div class="mb-3">
                <label for="name" class="form-label">Project name</label>
                <input type="text" class="form-control" name="name" value="{{$project->name}}">
            </div>
            <div class="mb-3">
                <label for="logo" class="form-label">Insert image</label>
                <input type="file" name="logo">
            </div>
            <div class="mb-3">
                <label for="project_start_date" class="form-label">Data init</label>
                <input type="date" class="form-control" name="project_start_date" value="{{$project->project_start_date}}">
            </div>
            <div class="mb-3">
                <label for="description" class="form-label">Description</label>
                <textarea name="description" cols="30" rows="10" class="form-control">{{$project->description}}</textarea>
            </div>
            <button type="submit" class="btn btn-primary mb-5">Modifica progetto</button>
        </form>
    </div>
</div>

3. 添加更新路由与控制器方法

  • 在路由文件中添加更新路由:
Route::put('/project/update/{project}', [ProjectController::class, 'update'])->name('project.update');
  • 在控制器中实现update方法处理表单提交:
public function update(Request $request, Project $project)
{
    // 验证请求数据
    $validated = $request->validate([
        'client_id' => 'required|integer|exists:clients,id',
        'name' => 'required|string',
        'project_start_date' => 'required|date',
        'description' => 'nullable|string',
        'logo' => 'nullable|image|max:2048', // 根据业务需求调整验证规则
    ]);

    // 更新项目基础数据
    $project->fill($validated);

    // 处理logo上传(如果有新文件)
    if ($request->hasFile('logo')) {
        // 可选:删除旧logo文件
        // Storage::delete($project->logo);
        $project->logo = $request->file('logo')->store('logos'); // 存储到storage/app/public/logos,需配置软链接
    }

    $project->save();

    return redirect()->route('project.index')->with('success', 'Project updated successfully');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:48:16