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

Laravel按外键获取最新记录判断字段为空后更新否则新增问题

问题原因

你原有代码未对amendments_to字段的空值状态做判断,只要匹配到send_id对应的最新记录就直接执行更新,因此不符合业务逻辑要求。

解决代码

首先获取指定send_id对应的最新OrderResponse记录,再根据字段状态判断执行更新还是新增操作:

// 获取最新的关联记录
$latestOrderResponse = OrderResponse::where('send_id', $id)
    ->orderBy('id', 'desc')
    ->first();

// 按业务规则判断执行逻辑
if ($latestOrderResponse && is_null($latestOrderResponse->amendments_to)) {
    // 最新记录的amendments_to为NULL,执行更新
    $latestOrderResponse->update([
        'amendments_to' => $request->comment
    ]);
} else {
    // 无符合条件的可更新记录,执行新增
    OrderResponse::create([
        'send_id' => $id,
        'amendments_to' => $request->comment,
        // 其余必填字段请根据你的实际业务补充
    ]);
}

注意事项

  • 执行create操作前,请确保OrderResponse模型的$fillable属性中已经添加了send_id、amendments_to等你要批量赋值的字段,避免触发Laravel的批量赋值保护报错。
  • 如果存在并发请求的场景,建议给上述操作加数据库事务+行锁,避免出现脏写问题,示例如下:
\DB::transaction(function () use ($id, $request) {
    $latestOrderResponse = OrderResponse::where('send_id', $id)
        ->orderBy('id', 'desc')
        ->lockForUpdate()
        ->first();

    if ($latestOrderResponse && is_null($latestOrderResponse->amendments_to)) {
        $latestOrderResponse->update([
            'amendments_to' => $request->comment
        ]);
    } else {
        OrderResponse::create([
            'send_id' => $id,
            'amendments_to' => $request->comment,
            // 其余必填字段补充
        ]);
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:45:05