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

Laravel中CRUD应用update函数无法生效,请求排查代码问题

Laravel CRUD更新数据不生效的问题排查与修复

问题根源分析

你的代码存在3个关键问题导致更新操作无效:

  • 变量名大小写不匹配:PHP是大小写敏感语言,验证后得到的变量是$validatedata,但执行更新时调用的是$validateData,后者未定义,导致传入空数据执行更新。
  • 请求字段与数据库字段不对应:迁移文件中性别字段名为jk,但验证规则和请求参数用的是jenis_kelamin,字段名不匹配导致该字段无法写入,且其他字段也因变量错误未被正确传递。
  • 模型类名不符合Laravel规范:模型类名使用全小写的mahasiswa,Laravel约定模型类名首字母大写(应为Mahasiswa),可能导致路由模型绑定或ORM操作出现隐性问题。

修正后的代码

控制器(Controller)

public function update(Request $request, Mahasiswa $mahasiswa)
{
    $validatedData = $request->validate([
        'nim'           => 'required|size:8|unique:mahasiswas,nim,'.$mahasiswa->id,
        'nama'          => 'required|min:3|max:50', // 统一字段名小写,与数据库一致
        'jenis_kelamin' => 'required|in:P,L',
        'jurusan'       => 'required',
        'alamat'        => '',
    ]);

    // 将请求字段jenis_kelamin映射为数据库字段jk
    $validatedData['jk'] = $validatedData['jenis_kelamin'];
    unset($validatedData['jenis_kelamin']);

    // 利用路由模型绑定的实例直接更新,无需再次查询数据库
    $mahasiswa->update($validatedData);

    return redirect()->route('mahasiswas.show', ['mahasiswa' => $mahasiswa->id])
        ->with('pesan', "Update data {$validatedData['nama']} berhasil");
}

模型(Model)

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

// 修正类名为首字母大写的Mahasiswa,符合Laravel规范
class Mahasiswa extends Model
{
    use HasFactory;
    protected $guarded = [];
}

迁移文件(Migration)

无需修改,保持原代码即可:

public function up()
{
    Schema::create('mahasiswas', function (Blueprint $table) {
        $table->id();
        $table->char('nim', 8)->unique();
        $table->string('nama');
        $table->char('jk',1);
        $table->string('jurusan');
        $table->text('alamat')->nullable();
        $table->timestamps();
    });
}

额外说明

  • 建议表单提交的字段名尽量与数据库字段名保持一致,避免额外的字段映射操作,减少出错概率。
  • 使用路由模型绑定后,直接调用模型实例的update()方法更高效,无需通过where查询再更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:25:54