Why do I have to run "composer dump-autoload" command to make migrations work in laravel?
Asked Answered
C

4

141

I have built some migration classes in my application to create the tables I need, but I keep getting errors. I need to run this command:

composer dump-autoload

Only then it works again as expected. Am I doing something wrong that generates this error or this is a normal behaviour with migrations?

Below is the error that I get when running the migration process:

  [Symfony\Component\Debug\Exception\FatalErrorException]  
  Class 'CreateVideoStatusTable' not found  
Compensatory answered 28/11, 2015 at 17:2 Comment(7)
are you using phpartisan for migrations?Toulouse
yes i am using it to generate the create table and to run the migrationCompensatory
do you have use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; inside your file and are extending the Migration class?Toulouse
yes , using "use Illuminate\Database\Schema\Blueprint" and "use Illuminate\Database\Migrations\Migration".Compensatory
Typically when I create migration files, they look similar to this codeshare.io/3iRxd take a look and see if yours follows a similar pattern, if you aren't you need to make sure that you are extending the Migration class. does everything look ok?Toulouse
framework can't handle delete file , from composer but ide can handle that , you can read autoload (PSR-0 & PSR-4) to better understand this issueMicropaleontology
#37239047Royden
T
146

OK so I think i know the issue you're having.

Basically, because Composer can't see the migration files you are creating, you are having to run the dump-autoload command which won't download anything new, but looks for all of the classes it needs to include again. It just regenerates the list of all classes that need to be included in the project (autoload_classmap.php), and this is why your migration is working after you run that command.

How to fix it (possibly) You need to add some extra information to your composer.json file.

"autoload": {
    "classmap": [
        "PATH TO YOUR MIGRATIONS FOLDER"
    ],
}

You need to add the path to your migrations folder to the classmap array. Then run the following three commands...

php artisan clear-compiled 
composer dump-autoload
php artisan optimize

This will clear the current compiled files, update the classes it needs and then write them back out so you don't have to do it again.

Ideally, you execute composer dump-autoload -o , for a faster load of your webpages. The only reason it is not default, is because it takes a bit longer to generate (but is only slightly noticable).

Hope you can manage to get this sorted, as its very annoying indeed :(

Toulouse answered 28/11, 2015 at 17:28 Comment(5)
i dont understand why laravel didnt handle this , its a greate framework .Compensatory
i already have my composer.json file with this : "autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/" } },Compensatory
how should i add the path ?Compensatory
i had an error running "php artisan dump-autoload" : [InvalidArgumentException] Command "dump-autoload" is not defined.Compensatory
sorry, you need to use composer, not php artisan. So its composer dump-autoloadToulouse
M
12

You should run:

composer dump-autoload

and if does not work you should re-install composer

Musicology answered 27/8, 2018 at 20:2 Comment(0)
Q
6

Short answer: classmaps are static while PSR autoloading is dynamic.

If you don't want to use classmaps, use PSR autoloading instead.

Quicktempered answered 13/5, 2020 at 17:0 Comment(0)
J
6

My error was placing a function inside config/fortify.php, in my case it was an anonymous function that gave the error.

The definitive solution for this is to see what files I normally modify in the config/ folder.

In many places they say delete the files from bootstrap/cache/* but it didn't work in my case, and it didn't really make sense. In any case I leave you the commands:

php artisan clear-compiled
composer dump-autoload
php artisan optimize

But I really recommend that you go through the base laravel config files that you have configured. here you will find the error.

Journey answered 7/7, 2021 at 11:48 Comment(1)
Hi, I hoped you could clarify, because I think I may be having a similar issue. Do you mean that having an anonymous function at all is not allowed in the config files? Or just that the function had a bug and that's why it wasn't working? Thanks!Implode

© 2022 - 2024 — McMap. All rights reserved.