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

Jak*_*dło 22 php laravel laravel-8

运行命令时出现标题错误:

php artisan db:seed
Run Code Online (Sandbox Code Playgroud)

我的截图: 在此处输入图片说明

我不知道这个问题从何而来。我正在寻找代码示例和解决方案,但我什么也没找到:(

文章TableSeeder.php

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
// use Laracasts\TestDummy\Factory as TestDummy;

class ArticlesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\Models\Article::class, 30)->create();
    }
}
Run Code Online (Sandbox Code Playgroud)

文章工厂.php

<?php

namespace Database\Factories;

use App\Models\Model;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class ModelFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = App\Models\Article::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'title' => $faker->text(50),
            'body' => $faker->text(200)
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

数据库浏览器.php

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(ArticlesTableSeeder::class);
    }
}
Run Code Online (Sandbox Code Playgroud)

预先感谢您的帮助!

小智 41

在 laravel 8 中删除了默认路由命名空间。

尝试改变:

文章TableSeeder.php:

 factory(App\Models\Article::class, 30)->create();
Run Code Online (Sandbox Code Playgroud)

到:

\App\Models\Article::factory()->count(30)->create(); 
Run Code Online (Sandbox Code Playgroud)

文章工厂.php:

protected $model = App\Models\Article::class;
Run Code Online (Sandbox Code Playgroud)

到:

protected $model = \App\Models\Article::class;
Run Code Online (Sandbox Code Playgroud)

你可能不得不改变:

 'title' => $faker->text(50),
            'body' => $faker->text(200)
Run Code Online (Sandbox Code Playgroud)

到:

 'title' => $this->faker->text(50),
        'body' => $this->faker->text(200)
Run Code Online (Sandbox Code Playgroud)


MK.*_*MK. 10

这里提到的所有建议都是正确的。但是,composer require laravel/legacy-factories如果您使用的是 Laravel 8 ,则必须运行才能运行代码。如果您收到错误消息,请Class 'Database\Factories\ArticleFactory' not found 确保您拥有class ArticleFactory extends Factory而不是 ModalFactory。并确保您像这里一样在文章模型中使用 HasFactory。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    use HasFactory;
}

Run Code Online (Sandbox Code Playgroud)

更多信息:Laravel 8 Modal 工厂


Ras*_*san 8

文章TableSeeder.php

<?php

namespace Database\Seeders;

use App\Models\Article;
use Illuminate\Database\Seeder;

class ArticlesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Article::factory()->times(30)->create();
    }
}
Run Code Online (Sandbox Code Playgroud)

文章工厂.php

<?php

namespace Database\Factories;

use App\Models\Article;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class ArticleFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Article::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'title' => $this->faker->text(50),
            'body'  => $this->faker->text(200)
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)


Add*_*ina 6

尝试改变

factory(App\Models\Article::class, 30)->create();
Run Code Online (Sandbox Code Playgroud)

App\Models\Article::factory()->count(30)->create();
Run Code Online (Sandbox Code Playgroud)