【问题标题】:Laravel factory Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, string given传递给 Illuminate\Database\Grammar::parameterize() 的 Laravel 工厂参数 1 必须是数组类型,给定字符串
【发布时间】:2021-08-19 08:23:51
【问题描述】:

尝试在 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 时失败,并出现以下错误:

类型错误

参数 1 传递给 Illuminate\Database\Grammar::parameterize() 必须是数组类型,给定字符串,调用 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php 886行

在供应商/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()

我真的不明白为什么它期望一个字符串列的数组。

【问题讨论】:

标签: php laravel laravel-8 laravel-seeding laravel-factory


【解决方案1】:

'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

【讨论】:

  • 啊,错误提到了下一个字段“desc”,但我想现在我应该习惯 PHP 错误以及真正的问题通常是如何出现的。我什至也尝试过方法而不是属性,但我不知道第二个布尔参数。
猜你喜欢
  • 2018-03-22
  • 2019-08-23
  • 2020-10-15
  • 2021-02-08
  • 1970-01-01
  • 2021-12-24
  • 2021-06-30
  • 1970-01-01
  • 2019-09-18
相关资源
最近更新 更多