简体   繁体   中英

Laravel 5: DB Seed class not found

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?

Step one - generate seed:

php artisan make:seed MemberInvitationSeeder

Step two - In DatabaseSeeder.php add line:

$this->call(MemberInvitationSeeder::class);

Step three :

composer dump-autoload

Step four :

php artisan db:seed

This should work


If this isn't the clue, check the composer.json file and make sure you have code below in the "autoload" section:

"classmap": [
    "database"
],

I solved this by adding the class to the seeder file, with the instruction use :

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

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?

这对我有用

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

I ran into the similar error but I was using DB facade DB::table rather than model. I am posting the answer just in case somebody has similar issues.

The seeder file had namespace namespace Database\\Seeders; and laravel was trying to look for DB class inside the namespace and hence the error appeared.

Class 'Database\\Seeders\\DB' not found .

Resolutions:

  • Remove the namespace and run composer dump-autoload
  • OR Add a backslash to \\DB::table('stock_categories')->([ ... ]); so Laravel starts looking the DB facade from root ( not from the namespace specified )

Eg,

\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
    ] );

If the above solutions doesn't work, try this one. You may have changed the namespace (by default, it's "App"). What you need to do is to go to the composer.json file and check this:

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

If the namespace is App like this example, this solution is not for you.

Otherwise, take the namespace you found and insert that line into your seeder class:

use NameSpaceFound\User;

如果要将字符串用作参数,则应包含命名空间

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

After making php artisan make:seed SeederName then you need to run composer dump-autoload command after that php artisan db:seed It is working for me.

I was facing this problem with laravel package with spatie to solve this problem just

1- append seeders path in composer.json of your package

 "autoload": {
        "psr-4": {
            ...
            "{packagename}\\{vendorname}\\Database\\Seeders\\": "database/seeders"
        }
    },
  1. then go to your main project and update composer with composer update
  2. auto-load your classess with composer dump-autoload

If it doesn't work delete Vendor folder and run composer install

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM