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

Laravel 9:如何默认将当前用户ID设置为模型属性

解决模型字段默认填充当前用户ID的问题

问题原因

PHP类的属性默认值仅支持常量表达式,无法使用Auth::id()这类动态函数调用结果作为默认值,所以直接在$attributes数组中设置会触发Constant expression contains invalid operations错误。另外迁移文件里设置默认值也无效,因为数据库层面无法获取当前应用的登录用户ID,只能配置固定值或数据库内置函数。

可行解决方案

方案1:利用模型creating事件

在模型的boot方法中注册创建事件,在模型即将存入数据库时自动填充当前用户ID:

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

    // 模型创建前触发赋值逻辑
    static::creating(function ($model) {
        $model->employee_id = auth()->id();
    });
}

方案2:通过构造函数设置

在模型构造函数中,判断当前为新建模型(未存入数据库)时设置默认值:

public function __construct(array $attributes = [])
{
    parent::__construct($attributes);

    // 仅在创建新模型实例时赋值
    if (!$this->exists) {
        $this->employee_id = auth()->id();
    }
}

注意事项

  • 确保代码执行时用户已完成登录,否则auth()->id()会返回null,若字段不允许为空,需额外添加登录校验逻辑。
  • 如果需要在特定场景下覆盖默认值,直接给employee_id赋值即可,会自动覆盖自动填充的值。

内容的提问来源于stack exchange,提问作者Kemal Özvarol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:40:41