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
相关产品推荐
相关产品推荐

