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

Laravel使用Mutator向数据库写入预设company_id不生效如何解决

问题原因

你写的修改器(Mutator)方法名为setFirstNameAttribute,Laravel的修改器触发规则是:只有对模型对应属性赋值时才会自动调用,也就是只有你修改first_name字段的时候这个方法才会执行。你创建产品时如果没有操作first_name字段,这个方法自然不会触发,也就不会给company_id赋值,最终存储值为null。


推荐解决方案

方案1:使用模型creating事件(最优,无侵入、易复用)

Laravel模型的creating事件会在每次执行插入数据操作前自动触发,不需要依赖任何特定字段的赋值,非常适合自动填充默认字段的场景。

你只需要在Product模型中添加如下代码即可:

protected static function boot(): void
{
    parent::boot();

    // 新建产品前自动填充企业ID
    static::creating(function (Product $product) {
        $product->company_id = session()->get('company.id');
    });
}

方案2:创建时手动统一赋值

如果你只有少数地方会写创建产品的逻辑,也可以直接在控制器的新增逻辑里手动合并company_id参数:

// 示例:表单验证通过后合并参数写入
Product::create($request->validated() + [
    'company_id' => session()->get('company.id')
]);

注意事项

  • 请先确认company_id已经被添加到Product模型的$fillable属性中,否则会被Laravel的批量赋值过滤机制拦截
  • 可以先手动打印session()->get('company.id')确认session中确实存在该值,避免本身session数据为空导致的存储null问题
  • 如果涉及在队列、命令行等无session的场景下创建产品,需要额外补充company_id的赋值逻辑,避免数据异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 23:06:00