问题描述
尝试在 laravel 8 中运行工厂时出现此错误。我查看了几篇有关此错误的帖子,但它们似乎都来自直接错误地保存/创建。不使用工厂。所以我不知道为什么工厂没有正确保存它。
我的迁移有:
public function up()
{
Schema::create('posts',function (Blueprint $table) {
$table->id();
$table->string('slug');
$table->string('name');
$table->longText('desc');
$table->foreignId('user_id')->constrained();
$table->timestamps();
$table->softDeletes();
});
}
我的模型有:
class Post extends Model
{
use HasFactory,SoftDeletes;
public function user()
{
return $this->belongsTo(User::class);
}
public function setSlugAttribute($value)
{
$this->attributes['slug'] = Str::slug($this->name);
}
}
我的工厂有:
public function deFinition()
{
return [
'name' => $this->faker->words,'desc' => $this->faker->sentence,'user_id' => rand(1,10)
];
}
我的帖子播种机有:
public function run()
{
Post::factory()->times(13)->create();
}
我的主要 DatabaseSeeder 运行一个用户播种器,该播种器为 10 个用户提供种子。然后一个帖子播种机播种 13 个帖子。
我运行 PHP artisan migrate:fresh --seed
并且在到达 Post Seeder 时失败并出现此错误:
类型错误
传递给 Illuminate\Database\Grammar::parameterize() 的参数 1 必须是数组类型,给定的字符串,调用 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.PHP 在线 886
在 vendor/laravel/framework/src/Illuminate/Database/Grammar.PHP:136 132▕* 133▕ * @param 数组 $values 134▕ * @return 字符串 135▕ */ ➜ 136▕ 公共函数参数化(数组 $values) 137▕{ 138▕ return implode(',',array_map([$this,'parameter'],$values)); 第139话 140▕
+1 vendor frames 2 [internal]:0
Illuminate\Database\Query\Grammars\Grammar::Illuminate\Database\Query\Grammars\{closure}("Odio
voluptatem quis facere possimus ut.","desc")
+13 vendor frames 16 database/seeders/PostsSeeder.PHP:17
Illuminate\Database\Eloquent\Factories\Factory::create()
我真的不明白为什么它需要一个字符串列的数组。
解决方法
'name' => $this->faker->words
将返回一个单词数组。
您可以调用底层方法并通过传递 true 作为第二个参数来告诉它返回一个字符串:
$this->faker->words(3,true) // 3 is the number of words which is the default
或者你可以使用类似 sentence
$this->faker->sentence