Laravel 5:未找到数据库种子类

4xrmg8kj  于 2022-11-18  发布在  其他
关注(0)|答案(9)|浏览(232)

I have this DatabaseSeeder.php:

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;


    class DatabaseSeeder extends Seeder {

        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            Model::unguard();

            $this->call('MemberInvitationSeeder');
        }
    }

I have this file MemberInvitationSeeder.php, sibling to the DatabaseSeeder.php file

<?php

use Illuminate\Database\Seeder;
use App\MemberInvitation;

    class MemberInvitationSeeder extends Seeder {

        public function run()
        {
            MemberInvitation::truncate();

            MemberInvitation::create( [
                'id' => 'BlahBlah' ,//com_create_guid(),
                'partner_id' => 1,
                'fisrt_name' => 'Thats',
                'last_name' => 'Me',
                'email' => 'me@mymail.com',
                'mobile_phone' => '444-342-4234',
                'created_at' => new DateTime
            ] );

        }
    }

Now I call

php artisan db:seed

and I get:

[ReflectionException]                        
  Class MemberInvitationSeeder does not exist

I tried everything I could find including "composer dump-autoload". to no avail. What am I doing wrong?

q8l4jmvw

q8l4jmvw1#

    • 第 一 步 * * - 生成 种子 :
php artisan make:seed MemberInvitationSeeder

中 的 每 一 个

    • 第 二 步 * * - 在 DatabaseSeeder.php 中 添加 行 :
$this->call(MemberInvitationSeeder::class);

格式
第 三 步

composer dump-autoload

格式

    • 第 四 步 * * :
php artisan db:seed

格式
这 应该 可以
如果 这 不是 线索 , 请 检查 composer.json 文件 , 并 确保 在 " autoload " 部分 中 有 以下 代码 :

"classmap": [
    "database"
],

格式

nzk0hqpo

nzk0hqpo2#

我通过将类添加到seeder文件中来解决这个问题,指令为use

<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\YourClassName;
pepwfjgg

pepwfjgg3#

I believe I know the reason now.
The new class MemberInvitationSeeder wasn't in the autoloaded classes in the composer.json file.
It wasn't there because I added that class manually.
Now, going forward, if I add such classes again, what should I use in order for my class to automatically to the autoloader?

zzwlnbp8

zzwlnbp84#

这对我的工作

  1. composer dump-autoload
  2. php artisan db:seed
mw3dktmi

mw3dktmi5#

我遇到了类似的错误,但我使用的是DB Facade DB::table而不是Model。我发布答案,以防有人有类似的问题。
seeder文件的名称空间为namespace Database\Seeders;,laravel尝试在名称空间内查找DB类,因此出现错误。
Class 'Database\Seeders\DB' not found .

决议:

  • 删除命名空间并运行composer dump-autoload
    将反斜杠添加到\DB::table('stock_categories')->([ ... ]);,以便Laravel从根目录( 而不是指定的名称空间 *)开始查找DB外观

例如:

\DB::table('MemberInvitation')->insert( [
         'id' => 'BlahBlah' ,//com_create_guid(),
         'partner_id' => 1,
         'fisrt_name' => 'Thats',
         'last_name' => 'Me',
         'email' => 'me@mymail.com',
         'mobile_phone' => '444-342-4234',
         'created_at' => new DateTime
    ] );
vuv7lop3

vuv7lop36#

如果上面的解决方案不起作用,试试这个。你可能已经改变了命名空间(默认情况下,它是“App”)。你需要做的是转到composer.json文件并检查以下内容:

"autoload": {
      "classmap": [
          "database"
      ],
      "psr-4": {
          "App\\": "app/"
      }
  },

如果命名空间是App(如本例所示),则此解决方案不适合您。
否则,使用您找到的名称空间并将该行插入到seeder类中:

use NameSpaceFound\User;
dfuffjeb

dfuffjeb7#

如果要将字符串用作参数,则应包括namespace

$this->call('Database\Seeders\MemberInvitationSeeder');
ulmd4ohb

ulmd4ohb8#

在制作php artisan make:seed SeederName之后,你需要在php artisan db:seed之后运行composer dump-autoload命令。

woobm2wo

woobm2wo9#

我正面临着这个问题与laravel包与spatie解决这个问题只是
1-在包的composer.json中追加种子路径

"autoload": {
        "psr-4": {
            ...
            "{packagename}\\{vendorname}\\Database\\Seeders\\": "database/seeders"
        }
    },

1.然后转到主项目并使用composer update更新composer
1.使用composer dump-autoload自动加载类

相关问题