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

Laravel 9中如何同时创建并更新不同数据表的数据

问题修复方案

你的代码存在语法和逻辑问题,以下是具体修复方案及问题说明:

错误点梳理

  1. update方法语法错误:更新床状态时,你用了比较运算符==,正确的数组键值对应该使用=>。
  2. 模型类名大小写错误:Laravel模型类名通常首字母大写(如Pasien、Bed),小写的pasien和bed可能导致类找不到的报错。
  3. 未处理床不存在的情况:如果传入的id_bed对应的床不存在,find()会返回null,直接调用update()会抛出异常。
  4. 缺少id_bed的有效性验证:没有验证传入的床ID是否存在于beds表中,可能导致无效数据存入pasiens表。
  5. 日期赋值冗余:date(now())可简化为now(),Laravel会自动处理日期格式。

修复后的完整代码

public function store(Request $request)
{
    $request->validate([
        'nama' => 'required',
        'jk' => 'required',
        'alamat' => 'required',
        'nik' => 'required|unique:pasiens',
        'no_telp' => 'required|unique:pasiens',
        'no_rm' => 'required|unique:pasiens|max:8',
        'status' => 'required',
        'id_bed' => 'required|exists:beds,id' // 新增验证,确保床ID有效
    ]);

    // 使用首字母大写的模型类名
    $pasien = Pasien::create([
        'nama' => $request->nama,
        'jk' => $request->jk,
        'alamat' => $request->alamat,
        'nik' => $request->nik,
        'no_telp' => $request->no_telp,
        'tgl_masuk' => now(), // 简化日期赋值
        'no_rm' => $request->no_rm,
        'status' => $request->status,
        'id_bed' => $request->id_bed
    ]);

    // 先检查床是否存在,再执行更新
    $bed = Bed::find($request->id_bed);
    if ($bed) {
        $bed->update([
            'status_bed' => 1 // 修正为正确的键值对语法
        ]);
    }

    return back()->with('berhasil', 'Data telah ditambahkan');        
}

额外优化建议

为保证数据一致性,建议使用数据库事务,若其中一步失败则回滚所有操作:

use Illuminate\Support\Facades\DB;

// 包裹事务逻辑
DB::beginTransaction();
try {
    $pasien = Pasien::create([
        'nama' => $request->nama,
        'jk' => $request->jk,
        'alamat' => $request->alamat,
        'nik' => $request->nik,
        'no_telp' => $request->no_telp,
        'tgl_masuk' => now(),
        'no_rm' => $request->no_rm,
        'status' => $request->status,
        'id_bed' => $request->id_bed
    ]);

    $bed = Bed::find($request->id_bed);
    if ($bed) {
        $bed->update(['status_bed' => 1]);
    }

    DB::commit();
    return back()->with('berhasil', 'Data telah ditambahkan');
} catch (\Exception $e) {
    DB::rollBack();
    return back()->with('gagal', 'Gagal menambahkan data: ' . $e->getMessage());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:07:25