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

Laravel插入数据遇user_id无默认值报错的问题问询

解决SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value 错误

你遇到的这个数据库插入错误,核心原因是stocks表的user_id字段没有获取到有效值,同时该字段在数据库中既无默认值也不允许为空。咱们来一步步排查并解决问题:

问题定位

先看代码里的两个关键问题:

  1. 控制器的字段引用错误:你在StockController的store方法里写了'user_id' => Auth::user()->user_id,但默认Laravel的User模型主键是id,不是user_id,这会导致获取不到正确的用户ID值。
  2. 前端冗余且不安全的输入框:你在表单里加了name="user_id"的输入框,其实完全没必要通过前端传递用户ID——后端直接通过Auth::user()获取既安全又可靠,还能避免前端篡改数据的风险。

具体修复方案

1. 修正StockController的store方法

把错误的字段引用改成正确的,同时可以去掉user_id的表单验证(因为我们不再从前端获取这个值):

public function store(Request $request)
{
    $this->validate($request, [
        // 移除user_id的验证规则,改为后端直接获取
        'product_name' => 'required',
        'product_code' => 'required',
        'details' => 'required',
        'price' => 'required',
        'cost' => 'required',
        'quntity' => 'required'
    ]);

    $stock = new Stock([
        'user_id' => Auth::user()->id, // 修正为正确的主键字段
        'product_name' => $request->get('product_name'),
        'product_code' => $request->get('product_code'),
        'details' => $request->get('details'),
        'price' => $request->get('price'),
        'cost' => $request->get('cost'),
        'quntity' => $request->get('quntity')
    ]);

    $stock->save();
    return redirect()->route('stock.index')->with('success', 'Data Added');
}

2. 清理视图中的冗余代码

从create视图里删掉这个多余的输入框:

<input type="text" name="user_id" value="{{Auth::user()->id }}" class="form-control">

可选:检查User模型主键(如果你的数据库特殊配置)

如果你的User表确实用user_id作为主键,需要在User模型里明确声明:

class User extends Authenticatable
{
    protected $primaryKey = 'user_id';
    // 其他模型代码...
}

不过默认Laravel用的都是id作为主键,所以这个步骤大概率不需要。

修复逻辑说明

  • 后端直接通过Auth::user()->id获取当前登录用户ID,既保证了数据的正确性,又避免了前端传递可能带来的安全风险。
  • 修正控制器的字段引用后,user_id会被正确赋值并插入数据库,彻底解决"没有默认值"的错误。

这样修改后,你再提交表单应该就能正常添加库存数据了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:00:20