【问题标题】:Call to undefined function factory() in Laravel 8在 Laravel 8 中调用未定义的函数 factory()
【发布时间】:2021-08-05 18:02:24
【问题描述】:

我有两个工厂在这里:

CourseFactory.php

protected $model = Course::class;

public function definition()
    {
        return [
            'title' => $this->faker->sentence(),
            'body' => $this->faker->paragraph(5),
            'price' => $this->faker->numberBetween(1000,10000),
            'image' => $this->faker->imageUrl(),
        ];
    }

还有EpisodeFactory.php

protected $model = Episode::class;

public function definition()
    {
        return [
            'title' => $this->faker->sentence(),
            'body' => $this->faker->paragraph(5),
            'videoUrl' => 'https://www.quirksmode.org/html5/videos/big_buck_bunny.mp4',
        ];
    }

然后在 DatabaseSeeder.php

public function run()
    {
        $user = factory(App\Models\User::class)->create();
        factory(\App\Models\Course::class , 5)->create(['user_id' => $user->id ])->each(function ($course) {
            factory(\App\Models\Episode::class, rand(6 , 20))->make()->each(function ($episode , $key) use ($course){
                $episode->number = $key +1;
                $course->episodes()->save($episode);
            });
        });
    }

但是当我想运行php artisan db:seed时,我得到了这个错误:

调用未定义函数 Database\Seeders\factory()

在 C:\Users\POUYA\Desktop_MACOSX\laravel-api\database\seeders\DatabaseSeeder.php

错误信息是指这一行:

$user = factory(App\Models\User::class)->create();

意思是我没有正确使用factory

那么如何正确调用factory呢?

非常感谢你们的任何想法或建议......

提前致谢。

UserFactory.php

protected $model = User::class;

public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }

【问题讨论】:

  • 用户工厂在哪里?
  • @DevBF 我刚刚将它添加到问题中。

标签: php laravel laravel-8


【解决方案1】:

在 laravel 8 中,调用工厂的方式发生了变化。请看changelog

这是now的称呼方式

因此,在您的情况下,将您的代码更改为:

public function run()
    {
        $user = \App\Models\User::factory()->create();
        \App\Models\Course::factory()->count(5)->create(['user_id' => $user->id ])->each(function ($course) {
            \App\Models\Episode::factory()->count(rand(6 , 20))->make()->each(function ($episode , $key) use ($course){
                $episode->number = $key +1;
                $course->episodes()->save($episode);
            });
        });
    }

【讨论】:

  • 谢谢你,但这一行有语法错误:$user = App\Models\User::factory->create();
  • 现在试试,就像任何其他 eloquent 一样,你必须将它作为函数调用 App\Models\User::factory()->create();。我已经编辑了我的答案
  • 这似乎是正确的,但现在我得到Class 'Database\Seeders\App\Models\User' not found 错误:(
  • 再试一次:),我已经编辑了答案。在\App\Models... 前面加上反斜杠,它试图查看当前的命名空间。我建议你在文件顶部使用use App\Models\User,这样你就可以调用User::factory()。以及课堂上的其他人
猜你喜欢
  • 2020-12-28
  • 2021-07-03
  • 2021-05-08
  • 2021-03-25
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多