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

Laravel中PedidoCliente模型数据无法存入数据库求助

Laravel数据无法存入数据库的解决方案

问题排查与修复步骤

1. 修复语法错误

你的保存代码里存在一处语法错误:$pedido->pdc_cod = 1 末尾缺少分号,这会导致代码执行失败并进入catch块回滚事务,但因为catch块没有输出错误信息,你无法察觉这个问题。

修改后的保存代码:

DB::beginTransaction();
try {

    $pedido                      = new PedidoCliente();
    $pedido->pdc_cod             = 1; // 补充缺失的分号
    $pedido->pdc_cli_cod         = 1;
    $pedido->pdc_tpgp_cod        = 1;
    $pedido->pdc_total_frete     = 99;
    $pedido->pdc_total_com_frete = 199;
    $pedido->pdc_desc            = 'Compra produto x';
    $pedido->pdc_data_insert     = date("Y-m-d H:i:s");
    $pedido->save();
    DB::commit();

 } catch (\Exception $e) {
    DB::rollback();
    echo $e->getMessage(); // 添加错误输出,方便调试排查
}

2. 解决批量赋值限制

Laravel Eloquent默认启用批量赋值保护,必须在模型中明确指定允许写入的字段,否则手动赋值的字段不会被提交到数据库。

修改PedidoCliente模型,添加$fillable属性:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class PedidoCliente extends Model
{
    protected $primaryKey = 'pdc_id';
    protected $table = 'scs_pedido_cliente';
    // 声明允许赋值的字段列表
    protected $fillable = [
        'pdc_cod',
        'pdc_cli_cod',
        'pdc_tpgp_cod',
        'pdc_total_frete',
        'pdc_total_com_frete',
        'pdc_desc',
        'pdc_data_insert'
    ];
}

若想快速关闭批量赋值保护(安全性较低,不推荐),可设置$guarded为空数组:

protected $guarded = [];

3. 额外调试建议

  • 保留catch块中的错误输出,能快速定位执行过程中的异常。
  • 可用$pedido->saveOrFail()替代$save(),它会在保存失败时主动抛出异常,便于捕获错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:26:17