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

Laravel使用create方法新增数据报1364字段无默认值错误如何解决

报错信息

SQLSTATE[HY000]: General error: 1364 Field 'product_name' doesn't have a default value

错误触发原因
  1. 提交数据的字段名与数据库字段不匹配:你表单提交的商品名称字段为pro_name,而数据库对应字段为product_name,$request->all()获取的数组中键名是pro_name,直接传入create()方法时无法匹配到product_name字段,导致该字段为空触发报错。同理你手动赋值时用到的SDAT对应数据库Starting_Date_and_Time、EDAT对应Ending_Date_and_Time也存在同样的字段名不匹配问题。
  2. 未开启模型批量赋值权限:Laravel的create()等批量赋值方法会默认过滤不在模型$fillable白名单内的字段,即使你传入的字段名匹配,如果没有在模型中配置允许批量赋值,对应字段也会被过滤为空。
解决方法
  • 第一步:做字段名映射,把提交的字段名转换为数据库对应的字段名,修改store方法代码:
public function store(Request $request)
{
    $data = $request->all();
    // 字段名映射
    $data['product_name'] = $data['pro_name'];
    $data['Starting_Date_and_Time'] = $data['SDAT'];
    $data['Ending_Date_and_Time'] = $data['EDAT'];
    // 移除多余的原字段
    unset($data['pro_name'], $data['SDAT'], $data['EDAT']);
    
    $product = product::create($data);   
    dd($product);
}
  • 第二步:配置Product模型的批量赋值白名单,打开app/Product.php添加如下代码:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    // 配置允许批量赋值的字段
    protected $fillable = [
        'product_name',
        'description',
        'Starting_Date_and_Time',
        'Ending_Date_and_Time'
    ];
}
  • 可选替代方案:如果是内部自用项目,不需要严格限制批量赋值字段,可以直接在模型中设置$guarded为空数组,代表所有字段都允许批量赋值:
// 放在Product模型类内
protected $guarded = [];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:09:02