Class 'User' not found

13,439

In your DatabaseSeeder in the root namespace you call the Class User. It therefor tries to load the class User. The definition of your class User is however in namespace App. You should therefor use either App\User in your DatabaseSeeder or add at the top of the file use App\User;

DatabaseSeeder

<?php

use App\User;
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('UserTableSeeder');
        $this->call('UserTableSeeder');

        Model::reguard();
    }
}

class UserTableSeeder extends Seeder
{
    public function run()
    {

        DB::table('users')->delete();

        User::create(['email' => '[email protected]']);

    }
}

Since Laravel 8+ the User class is now stored by default in the app/Models directory; so instead of using App\User use App\Models\User above.

Ps. by default Laravel ships with a User model, use that one. In case you removed that model you can use the fallback provided by Laravel:

use Illuminate\Foundation\Auth\User;

On a side note something I find very useful in order to debug artisan output. You should use the flag -vvv which adds extreme verbosity to the output messages including a complete stack trace.

php artisan migrate -vvv
Share:
13,439

Related videos on Youtube

Kenziiee Flavius
Author by

Kenziiee Flavius

Works As: PHP Developer, Junior.. for now! working on getting better knowledge in PHP and one day become a top developer.

Updated on September 14, 2022

Comments

  • Kenziiee Flavius
    Kenziiee Flavius over 1 year

    So I'm trying a basic php artisan db:seed after migrating my database but it keeps returning the title error in cmd -[Symfony\Component\Debug\Exception\FatalErrorException] Class 'User' not found

    Things I Have Tried

    • php dump-autoload after updating the class
    • php dump-autoload before running the db:seed function
    • rolling back the migration and then re-running it
    • rolling back the migration and then re-running it with the --seed syntax
    • Change the namespace of the 'Users' File

    Below is the migrations

    <?php
    
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreateUsersTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('users', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name');
                $table->string('email')->unique();
                $table->string('password', 60);
                $table->rememberToken();
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::drop('users');
        }
    }
    

    I believe that everything here is correct, and now here is the user class.

    <?php namespace App;
    
    use Illuminate\Auth\Authenticatable;
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Auth\Passwords\CanResetPassword;
    use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
    use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
    
    class User extends Model implements AuthenticatableContract, CanResetPasswordContract {
    
        use Authenticatable, CanResetPassword;
    
        /**
         * The database table used by the model.
         *
         * @var string
         */
        protected $table = 'users';
    
        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = ['name', 'email', 'password'];
    
        /**
         * The attributes excluded from the model's JSON form.
         *
         * @var array
         */
        protected $hidden = ['password', 'remember_token'];
    
    }
    

    And now lastly is the all important database seeder

    <?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('UserTableSeeder');
            $this->call('UserTableSeeder');
    
            Model::reguard();
        }
    }
    
    class UserTableSeeder extends Seeder
    {
        public function run()
        {
    
            DB::table('users')->delete();
    
            User::create(['email' => '[email protected]']);
    
        }
    }
    

    So that's it my full syntax, if any more files are required then please request them and I will update my question.

  • Ashwani Panwar
    Ashwani Panwar about 8 years
    if use App\User; not works then put it like this use Illuminate\Foundation\Auth\User;.
  • moritzg
    moritzg over 7 years
    @AshwaniPanwar Thank you that was my issue and fixed it for me!
  • AdRock
    AdRock about 7 years
    use Illuminate\Foundation\Auth\User; is what i neeeded
  • Metafaniel
    Metafaniel over 2 years
    Thanks @AshwaniPanwar I had to add this line to DatabaseSeeder.php and UsersTableSeeder.php using Laravel 5.8.38. Greetings