Laravel8运行Factory时parameterize()参数类型错误如何解决?
问题原因
- 核心错误来源于PostFactory中对
name字段的赋值:$this->faker->words方法默认返回数组类型,但posts表的name字段定义为string类型,数组无法直接存入字符串字段,触发框架底层SQL参数处理逻辑报错。 - 关联影响:你的Post模型中定义了
setSlugAttribute修改器,逻辑是从$this->name生成slug值,当name为数组时,Str::slug接收非法类型参数也会额外引发类型错误。
解决方案
1. 修复Factory字段赋值
修改PostFactory的definition方法,给words方法传入第二个参数true,使其返回拼接完成的字符串:
public function definition() { return [ // 第二个参数true表示将多个单词拼接为完整字符串 'name' => $this->faker->words(3, true), 'desc' => $this->faker->sentence, 'user_id' => rand(1,10) ]; }
修改后重新执行php artisan migrate:fresh --seed即可正常运行。
2. 可选优化:健壮化Slug修改器
可以对Slug修改器增加类型判断,避免后续其他场景传入非法值引发同类错误:
public function setSlugAttribute($value) { $slugSource = $value ?: $this->name; $this->attributes['slug'] = Str::slug(is_string($slugSource) ? $slugSource : ''); }
内容的提问来源于stack exchange,提问作者user16092281
相关产品推荐
相关产品推荐

