29

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

php artisan db:seed

我的截图: 在此处输入图像描述

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

文章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();
    }
}

文章工厂.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);
    }
}

预先感谢您的帮助!

4

8 回答 8

48

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

尝试改变:

文章TableSeeder.php:

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

至:

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

文章工厂.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)
于 2020-09-15T13:20:33.790 回答
13

这里提到的所有建议都是正确的。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;
}

欲了解更多信息:Laravel 8 模态工厂

于 2020-09-19T21:47:11.660 回答
8

尝试改变

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

App\Models\Article::factory()->count(30)->create();
于 2020-09-11T13:09:11.543 回答
5

文章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();
    }
}

文章工厂.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)
        ];
    }
}
于 2020-09-17T08:27:43.817 回答
4

如果您使用的是 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

于 2020-09-15T14:23:23.987 回答
1

当我意识到我的模型没有使用 HasFactory 特征时,我面临同样的问题。

<?php

namespace App\Models;

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

class Category extends Model
{
    use HasFactory;
    
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'categories';
   
}

因此,请确保您的模型正在使用此特征。

于 2021-09-25T16:28:56.020 回答
1

改变

‍<code>factory(App\Models\Article::class, 30)->create(); ‍</code>

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

于 2021-09-11T05:03:43.673 回答
0

如果您使用的是 laravel 8 版,您可以使用以下目录:

使用应用\模型\文章;文章::factory()->count(30)->create();

于 2021-10-30T19:48:16.767 回答