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

问题描述

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

php artisan db:seed

我的屏幕截图:

enter image description here

我不知道这个问题是从哪里来的。我在搜索代码示例和解决方案,但没有找到任何东西:(

ArticlesTableSeeder.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();
    }
}

ArticleFactory.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)
        ];
    }
}

DatabaseSeeder.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);
    }
}

预先感谢您的帮助!

解决方法

在laravel 8中,默认路由名称空间已删除。

尝试更改:

ArticlesTableSeeder.php:

 factory(App\Models\Article::class,30)->create();

收件人:

\App\Models\Article::factory()->count(30)->create(); 

ArticleFactory.php:

protected $model = App\Models\Article::class;

收件人:

protected $model = \App\Models\Article::class;

,您可能需要更改:

 'title' => $faker->text(50),'body' => $faker->text(200)

收件人:

 'title' => $this->faker->text(50),'body' => $this->faker->text(200)
,

尝试更改

factory(App\Models\Article::class,30)->create();

App\Models\Article::factory()->count(30)->create();
,

如果您使用的是laravel版本8,请参阅升级指南。 “ Laravel的模型工厂功能已完全重写以支持类,并且与Laravel 7.x样式工厂不兼容。但是,为了简化升级过程,我们创建了一个新的laravel / legacy-factories软件包,以继续将您现有的工厂与Laravel 8.x.您可以通过Composer安装此软件包:

作曲家需要laravel / Legacy-factories”

https://laravel.com/docs/8.x/upgrade#seeder-factory-namespaces

,

ArticlesTableSeeder.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();
    }
}

ArticleFactory.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)
        ];
    }
}
,

此处提到的所有建议都是正确的。 但是,如果您使用的是Laravel 8,则必须运行PHP Fatal error: Class 'App/Models/User' not found in Psy Shell code on line 1 才能运行代码。 如果出现错误提示composer require laravel/legacy-factories 然后确保您拥有Class 'Database\Factories\ArticleFactory' not found而不是ModalFactory。 并确保您在此处的Article Model中使用HasFactory。

class ArticleFactory extends Factory

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...