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

