Laravel 工厂参数 1 传递给 Illuminate\Database\Grammar::parameterize() 必须是数组类型,字符串给定

问题描述

尝试在 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

words() documentation

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...