【问题标题】:{closure}() must be an instance of Faker\Generator\Generator on laravel factory seed{closure}() 必须是 laravel 工厂种子上的 Faker\Generator\Generator 实例
【发布时间】:2018-11-08 19:51:36
【问题描述】:

当我使用 php工匠数据库:种子 我得到了错误? 在 UserFactory.php 第 27 行:

Type error: Argument 1 passed to
Illuminate\Database\Eloquent\Factory::{closure}() must be an instance
of Faker\Generator\Generator, instance of Faker\Generator given

Userfactory.php 使用 Faker\Generator 作为 Faker;

(这是第 27 行)

$factory->define(App\Models\Admin::class, function (Faker\Generator $faker) {
    static $password;

        return [
            'name' => $faker->name,
            'email' => $faker->safeEmail,
            'password' => $password ?: $password = bcrypt('secret'),
            'remember_token' => str_random(10),
        ];
    });

AdminsTableSeeder.php

public function run()
{
    factory('App\Models\Admin',3)->create([
        'password' => bcrypt('123456')
        ]);
}

DatabaseSeeder.php

public function run()
{
    // $this->call(UsersTableSeeder::class);
    $this->call(AdminsTableSeeder::class);
}

我不知道它是怎么发生的。

【问题讨论】:

  • 应该是这样 $factory->define(App\Admin::class, function (Faker\Generator $faker) { static $password; return [ 'name' => $faker-> name, 'email' => $faker->safeEmail, 'password' => $password ?: $password = bcrypt('secret'), 'remember_token' => str_random(10), ]; });
  • 重新加载您的修补程序并重试。
  • @SachinAghera 我不知道你是什么意思?区别是什么?
  • @AnowarHossain 我不使用修补程序,如何重新加载它?我试试重启电脑还是一样的错误?

标签: laravel factory laravel-seeding


【解决方案1】:

我解决了 使用 Faker\Generator 作为 Faker;

(this is line 27)
    $factory->define(App\Models\Admin::class, function (Faker $faker) 

这意味着不要在你的函数中使用function(Faker\Generator $faker),而是使用function (Faker $faker)

这为我解决了。

【讨论】:

  • 它在控制器中的工作方式是否相同。我想在 Controller 中创建一些伪造者。
猜你喜欢
  • 1970-01-01
  • 2019-07-21
  • 2021-06-29
  • 1970-01-01
  • 2016-10-15
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
相关资源
最近更新 更多