Laravel 传递给 Illuminate\Database\Grammar::parameterize() 的工厂参数 1 必须是数组类型,字符串给定
Laravel factory Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, string given
我在尝试 运行 laravel 8 中的工厂时遇到此错误。我已经查看了几个关于此错误的 post,但它们似乎都直接错误地来自 saving/creating。不使用工厂。所以我不确定为什么工厂没有正确保存它。
我的迁移有:
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)
];
}
我的 Post 播种机有:
public function run()
{
Post::factory()->times(13)->create();
}
我的主要 DatabaseSeeder 运行 是一个用户播种器,可以播种 10 个用户。然后 post 播种机播种 13 posts.
I 运行 php artisan migrate:fresh --seed
当它到达 Post 播种机时失败并出现以下错误:
TypeError
Argument 1 passed to Illuminate\Database\Grammar::parameterize()
must be of the type array, string given, called in
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php
on line 886
at vendor/laravel/framework/src/Illuminate/Database/Grammar.php:136
132▕ *
133▕ * @param array $values
134▕ * @return string
135▕ */ ➜ 136▕ public function parameterize(array $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
将 return 一个单词数组。
您可以调用底层方法并通过将 true 作为第二个参数传递给 return 一个字符串:
$this->faker->words(3, true) // 3 is the number of words which is the default
或者你可以使用 sentence
$this->faker->sentence
我在尝试 运行 laravel 8 中的工厂时遇到此错误。我已经查看了几个关于此错误的 post,但它们似乎都直接错误地来自 saving/creating。不使用工厂。所以我不确定为什么工厂没有正确保存它。
我的迁移有:
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)
];
}
我的 Post 播种机有:
public function run()
{
Post::factory()->times(13)->create();
}
我的主要 DatabaseSeeder 运行 是一个用户播种器,可以播种 10 个用户。然后 post 播种机播种 13 posts.
I 运行 php artisan migrate:fresh --seed
当它到达 Post 播种机时失败并出现以下错误:
TypeError
Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, string given, called in /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php on line 886
at vendor/laravel/framework/src/Illuminate/Database/Grammar.php:136 132▕ * 133▕ * @param array $values 134▕ * @return string 135▕ */ ➜ 136▕ public function parameterize(array $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
将 return 一个单词数组。
您可以调用底层方法并通过将 true 作为第二个参数传递给 return 一个字符串:
$this->faker->words(3, true) // 3 is the number of words which is the default
或者你可以使用 sentence
$this->faker->sentence