Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

gkohli's avatar

Class "App\User" not found : Error(code: 0): Class \"App\\User\" not found at

Can anyone help me to find the source of this error?

I am not using "App\User" anywhere in app. wherever User:: is used , I am using "use App\Models\User;" also



[2023-07-15 06:18:39] production.ERROR: Class "App\User" not found {"exception":"[object] (Error(code: 0): Class \"App\User\" not found at /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php:791)
[stacktrace]
#0 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php(316): Illuminate\Database\Eloquent\Model->newRelatedInstance()
#1 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php(284): Illuminate\Database\Eloquent\Model->morphInstanceTo()
#2 /var/www/myLaravelApp/vendor/laravel/sanctum/src/PersonalAccessToken.php(49): Illuminate\Database\Eloquent\Model->morphTo()
#3 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(580): Laravel\Sanctum\PersonalAccessToken->tokenable()
#4 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(532): Illuminate\Database\Eloquent\Model->getRelationshipFromMethod()
#5 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(457): Illuminate\Database\Eloquent\Model->getRelationValue()
#6 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2222): Illuminate\Database\Eloquent\Model->getAttribute()
#7 /var/www/myLaravelApp/vendor/laravel/sanctum/src/Guard.php(161): Illuminate\Database\Eloquent\Model->__get()
#8 /var/www/myLaravelApp/vendor/laravel/sanctum/src/Guard.php(69): Laravel\Sanctum\Guard->isValidAccessToken()
#9 [internal function]: Laravel\Sanctum\Guard->__invoke()
#10 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Auth/RequestGuard.php(58): call_user_func()
#11 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Auth/GuardHelpers.php(60): Illuminate\Auth\RequestGuard->user()
#12 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(63): Illuminate\Auth\RequestGuard->check()
#13 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(42): Illuminate\Auth\Middleware\Authenticate->authenticate()
#14 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Auth\Middleware\Authenticate->handle()
#15 /var/www/myLaravelApp/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#16 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful->Laravel\Sanctum\Http\Middleware\{closure}()
#17 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#18 /var/www/myLaravelApp/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php(34): Illuminate\Pipeline\Pipeline->then()
#19 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful->handle()
#20 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#21 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Routing/Router.php(799): Illuminate\Pipeline\Pipeline->then()
#22 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Routing/Router.php(776): Illuminate\Routing\Router->runRouteWithinStack()
#23 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Routing/Router.php(740): Illuminate\Routing\Router->runRoute()
#24 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Routing/Router.php(729): Illuminate\Routing\Router->dispatchToRoute()
#25 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(190): Illuminate\Routing\Router->dispatch()
#26 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#27 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#28 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#29 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
#30 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#31 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#32 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#33 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#34 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#35 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#36 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#37 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#38 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\HandleCors->handle()
#39 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#40 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle()
#41 /var/www/myLaravelApp/app/Http/Middleware/IpblockedMiddleware.php(34): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#42 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\IpblockedMiddleware->handle()
#43 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#44 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\Pipeline\Pipeline->then()
#45 /var/www/myLaravelApp/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(134): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#46 /var/www/myLaravelApp/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle()
#47 {main}


Below is my composer

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^8.1.2",
        "alexandr-mironov/php-smpp": "1.3.0.7",
        "barryvdh/laravel-dompdf": "^2.0",
        "firebase/php-jwt": "^6.4",
        "guzzlehttp/guzzle": "^7.2",
        "laravel/framework": "^9.52",
        "laravel/helpers": "^1.5",
        "laravel/sanctum": "^3.0",
        "laravel/tinker": "^2.7",
        "laravel/ui": "^3.3",
        "league/flysystem-aws-s3-v3": "^3.0",
        "mangopay/php-sdk-v2": "^2.3",
        "nesbot/carbon": "^2.41",
        "niklasravnsborg/laravel-pdf": "^4.0",
        "predis/predis": "^1.1",
        "rollbar/rollbar-laravel": "^7.2",
        "simplesoftwareio/simple-qrcode": "~4",
        "twilio/sdk": "^6.18",
        "webpatser/laravel-uuid": "^4.0"
    },
    "require-dev": {
        "mockery/mockery": "^1.4.4",
        "nunomaduro/collision": "^6.3",
        "phpunit/phpunit": "^9.5.10",
        "fakerphp/faker": "^1.9.1",
        "spatie/laravel-ignition": "^1.4"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\": "app/"
        },
        "classmap": [
            "app/Library/",
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\Foundation\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ],
        "post-update-cmd": [
            "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
        ]
    }
}

​```
0 likes
24 replies
Snapey's avatar

one of your packages is perhaps out of data and does not know that the user model has moved

I would check each out and see when they were last updated

1 like
gkohli's avatar

@Snapey I am suspecting "Sanctum" because that is the last which call "Guard->isValidAccessToken()" and from there Model is called.

Snapey's avatar

when did this error start? What has changed?

Do artisan commands work?

gkohli's avatar

@Snapey yes artisan commands working well.

It's coming since we upgraded from Laravel ^8.0 to "^9.52"

gkohli's avatar

@Snapey yes none is having app/user . If it helps I can paste all here .

JussiMannisto's avatar

@gkohli Check the 'model' entry in config/auth.php and make sure that it has the correct class name. You should also check bootstrap/cache/config.php to see if an old config value is cached there. You can run php artisan config:clear to clear the config cache, or php artisan config:cache to rebuild it.

If you have recently moved the model, you should run composer dump-autoload. This regenerates the autoload files.

gkohli's avatar

@JussiMannisto

I already cleared the cache many times and composer dump-autoload also

In config/auth.php



'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],


Snapey's avatar

Did you move your models as part of the upgrade?

gkohli's avatar

@Snapey When we upgraded from 8 to 9. yes we moved User.php from app/ to app/Models. We used Laravel Shift for the upgrade.

For some weird reason, We don't use Eloquent. Only for auth we are using User.

gkohli's avatar

@NoLAstNamE This the config/auth.php

'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

'password_timeout' => 10800,

Snapey's avatar

have you done a project wide search for App\User ? could be in a use statement somewhere

Post the share link from the error page so that we can see the stack trace. This should tell you exactly where the error is

Snapey's avatar

Just for lols

php artisan cache:clear

composer dump

can you post your User model

gkohli's avatar

@Snapey yes I did cache clear and composer dump too. today at least 4-5 times

here is my model

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens;
    use Notifiable;
    use HasFactory;

    protected $table = 'tb_users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    /*
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
    */
}


Snapey's avatar

@gkohli It seems to be related to the HasApiTokens trait. I assume you are using sanctum tokens for your client auth?

If you are not dependent on it, try temporarily commenting it out

gkohli's avatar

@Snapey We issue tokens to mobile app APIs.

I am afraid I can comment it out.

To begin issuing tokens for users, your User model should use the Laravel\Sanctum\HasApiTokens trait:

laravel[dot]com/docs/10.x/sanctum#issuing-api-tokens

Snapey's avatar
Snapey
Best Answer
Level 122

@gkohli ok, something occurred to me.

There is a table personal_access_tokens which uses a polymorphic relationship. I'd put money on records in that table still having App\User as the tokenable_type

2 likes
gkohli's avatar

@Snapey yes you are correct, I can see in db "App\User" in "tokenable_type" of table personal_access_tokens

how to fix that. I can change DB but how to make sure it won't inserted again?

Snapey's avatar

@gkohli just change the values from App\User to App\Models\User these are tokens created before the upgrade. New tokens will have the correct model name.

1 like
gkohli's avatar

@Snapey yes, once again you are correct.

Thank you very much for your help and time.

Snapey's avatar

@NoLAstNamE yes although it would not have fixed your existing records. The framework could have used morph maps from the start and then this would not have been an issue

1 like

Please or to participate in this conversation.