【问题标题】:DB Seeder class not found未找到 DB Seeder 类
【发布时间】:2021-02-07 07:36:56
【问题描述】:

我正在尝试使用以下文件“ItemsTableSeeder”和“UsersTableSeeder”为数据库播种,但我不断收到消息:“目标类 [ItemsTableSeeder] 不存在。”当我运行 php artisan db:seed.

这些文件是在命令提示符中添加的,命令为“php artisan make:seeder ItemsTableSeeder”和“php artisan make:seeder UsersTableSeeder”。

这是我的文件结构:

-数据库

-- 工厂

  • ItemFactory.php
  • UserFactory.php

-- 播种机

  • DatabaseSeeder.php
  • ItemsTableSeeder.php
  • UsersTableSeeder.php

// ItemsTableSeeder.php


    <?php
    
    use Illuminate\Database\Seeder;
    
    class ItemsTableSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            factory(\App\Items::class, 20)->create();
        }
    }

//UsersTableSeeder.php


    <?php
    
    use Illuminate\Database\Seeder;
    
    class UsersTableSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            factory(\App\Users::class, 3)->create();
        }
    }
DatabaseSeeder.php

    <?php
    
    use Illuminate\Database\Seeder;
    use Illuminate\Database\Eloquent\Model; 
    
    class DatabaseSeeder extends Seeder
    {
        /**
         * Seed the application's database.
         *
         * @return void
         */
        public function run()
        {
            $this->call('ItemsTableSeeder');
            $this->call('UsersTableSeeder');
        }
    }

我尝试在添加两个种子文件后运行“composer dump-autoload”,但在这个阶段这没有任何区别。我也试过清除缓存 'php artisan config:cache'。

这是我的“autoload_classmap.php”的摘录(在运行 composer dump-autoload 之后):

 'Cron\\HoursField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/HoursField.php',
    'Cron\\MinutesField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/MinutesField.php',
    'Cron\\MonthField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/MonthField.php',
    'Database\\Factories\\ItemFactory' => $baseDir . '/database/factories/ItemFactory.php',
    'Database\\Factories\\UserFactory' => $baseDir . '/database/factories/UserFactory.php',
    'DeepCopy\\DeepCopy' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php',
    'DeepCopy\\Exception\\CloneException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php',
    'DeepCopy\\Exception\\PropertyException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php',
    'DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php',
    'DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php',
    'DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php',

任何其他尝试的想法将不胜感激,

谢谢,

罗伯特

英国伦敦

【问题讨论】:

  • 确保 composer.json 文件的“autoload”键下的“classmap”中存在“database/seeds”
  • 如果你运行 php artisan db:seed --class=ItemsTableSeeder 会发生什么?
  • @Flo Espen 我得到了完全相同的信息。是的,类映射文件夹“autoload”中存在数据库/播种机:{“psr-4”:{“App\\”:“app/”,“Database\\Factories\\”:“database/factories/”, "数据库\\播种机\\": "数据库/播种机/" } },
  • 这里还有什么想法吗?仍然没有修复。

标签: php mysql laravel laravel-artisan


【解决方案1】:

在每个种子文件的顶部添加namespace Database\Seeders;

然后作曲家转储自动加载

【讨论】:

    【解决方案2】:

    您的结构文件运行良好。

    尝试新鲜的迁移 php artisan migrate:fresh --seed

    如果仍然没有修复,试试这个:php artisan db:seed --force

    然后: 1-作曲家转储自动加载 2- php 工匠数据库:种子

    让我知道这是否有效

    【讨论】:

      【解决方案3】:

      您是否尝试在运行命令之前添加namespace Database\Seeders;

      【讨论】:

      • 是的。罗伯特,你缺少命名空间,这就是导致错误的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 2021-07-07
      • 1970-01-01
      • 2018-10-17
      • 2018-04-19
      • 2018-04-11
      • 1970-01-01
      相关资源
      最近更新 更多