Laravel 8 模型自定义__construct后factory()->create()执行失败如何解决
问题原因
你重写Eloquent模型的构造方法时,没有接收父类要求的$attributes参数,也没有调用父类的构造方法,导致工厂生成的filename属性无法被正常传入模型,执行插入操作时自然就缺少对应字段值。
修复方案
修改你的ClientDocument模型的构造方法如下:
public function __construct(array $attributes = []) { // 必须先调用父类构造方法,传入属性参数 parent::__construct($attributes); // 你的自定义逻辑 if (auth()->user()) { $this->locale = auth()->user()->locale; } else { $this->locale = 'en'; } }
补充说明
- Eloquent模型的构造方法默认会接收
$attributes数组,工厂生成的字段值都会放在这个数组里传入模型,用于后续的批量赋值和写入操作。你之前的自定义构造完全跳过了这个流程,所以所有工厂生成的属性都没有被模型识别。 - 运行工厂、队列任务等CLI场景时,会话默认不生效,
auth()->user()会返回null,你的默认值设置符合当前需求,无需额外调整。
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

