web-dev-qa-db-fra.com

Classe d'erreur fatale Laravel introuvable lors de la migration

  1. J'ai exécuté artisan migrate:reset
  2. J'ai supprimé certains de mes fichiers de migration car je n'avais plus besoin de ces tables. 
  3. J'ai exécuté composer dump-autoload suivi de artisan dump-autoload
  4. J'ai couru artisan migrate et je continue à avoir cette erreur:

    PHP Erreur fatale: La classe 'Foo' ne figure pas dans /vagrant/LaravelBackend/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php à la ligne 297

J'ai essayé de:

  • Réexécutez composer dump-autoload et artisan dump-autoload (également utilisé artisan clear-compiled)
  • Supprimez la table de migration et exécutez artisan migrate:install
  • Supprimez le fichier vendor et composer.lock et exécutez composer install
  • Rechercher dans mon projet avec PHPStorm pour la classe Foo. Je n'ai rien trouvé.

    Je continue à avoir la même erreur. C'est la première fois que je lance ceci depuis que j'ai mis à jour à la version 4.2 si cela peut être lié. Quelque chose d'autre que je devrais rechercher?

19
Wistar

J'ai résolu mon problème par 

  1. Supprimer toute la migration
  2. En cours composer dump-autoload
  3. En les rajoutant un par un et en exécutant php artisan migrate
  4. Suppression de ceux qui ont causé une erreur à Laravel
  5. Créer de nouvelles migrations pour remplacer celles supprimées

Je ne sais pas pourquoi cela a fonctionné, mais je suppose que j'ai peut-être modifié le nom de classe de ces migrations problématiques par le passé.

J'ai également constaté que renommer la migration avec son nom initial (celui renvoyé avec l'erreur fatale) fonctionnait également pour certaines d'entre elles.

25
Wistar

J'ai eu ce problème aussi . Il faut se rappeler: le nom de la classe doit être en conformité avec le nom de fichier . Renommer un fichier simple m'a aidé :)

Par exemple: dans le fichier "2014_12_08_100923_create_items_tables.php" doit être la classe portant le nom "CreateItemsTables" avec des mots CamelCase.

31
Juljan

J'ai couru dans cet aswell et la solution était différente de tout ce qui précède. La raison de son échec est que le nom du fichier était toujours mentionné dans le tableau des migrations de la base de données. Comme il n'y avait pas de colonnes uniques, je ne pouvais pas le supprimer avec PHPMyAdmin et je devais suivre la route de la CLI.

Connectez-vous à votre serveur en tant que root . Tapez ce qui suit:

mysql -p database_name

(il demande maintenant votre mot de passe. À partir de maintenant, tout est précédé de mysql> , ce qui signifie simplement que vous vous trouvez dans l'environnement Mysql.

select * from migrations;

Recherchez le fichier de migration que vous avez supprimé et copiez le nom.

delete from migrations where migration = '2015_07_21_000119_create_some_table';

Il convient de mentionner quelque chose sur 1 ligne affectée. Maintenant, vérifiez qu'il est parti en tapant à nouveau la première commande:

select * from migrations;

Si c'est parti, quittez l'environnement Mysql en tapant

exit;

Maintenant, essayez ' php artisan migrate: rollback ' à nouveau et cela devrait fonctionner comme un charme :-)

12
Stan

Il y a un moyen plus facile. 

  1. Recréez ces migrations de suppression manuellement. artisan make:migration
  2. lancez artisan migrate:reset pour restaurer 
  3. Supprimez les fichiers de migration factices que vous venez de créer.
  4. exécuter artisan migrate:refresh
4
John Mccandles

Je sais que c'est un peu passé, mais il existe une meilleure façon de faire. Exécutez les opérations suivantes dans le terminal et sentez-vous libre de les supprimer:

~$ php artisan clear-compiled;php artisan cache:clear;php artisan config:clear;php artisan debugbar:clear;php artisan view:clear;php artisan optimize

Pour ce faire, créez un fichier exécutable nommé artisan-clear:

#!/bin/bash

php artisan clear-compiled
php artisan cache:clear
php artisan config:clear
php artisan debugbar:clear
php artisan view:clear
php artisan optimize
3
YahyaE

La solution réelle consiste à utiliser le nom correct pour vos traductions. Vous devrez peut-être encore faire un 

composer dump-autoload

Les fichiers de migration doivent être les suivants YYYY_MM_DD_000000_create_some_table.php

class CreateSomeTable extends Migration{}

2
xatzistnr

version 5.1.3 même problème, corrigez-le moi:

  • supprimer la base de données de toutes les tables
  • php artisan migrate: status

sortie: No migrations found. ok l'utiliser 

  • php artisan migrate: installer
  • php artisan migrer

la sortie est:

Migrated: 2016_11_24_093015_dt_some_table
Migrated: 2016_12_05_141004_dt_some_table
Migrated: 2016_12_07_110518_dt_some_table
Migrated: 2016_12_08_141807_dt_some_table
Migrated: 2016_12_13_090832_dt_some_table

ce problème est résolu

1
Qh0stM4N

Pour moi, la solution a été que le nom de ma classe à l’intérieur de la migration ait commencé par une lettre minuscule. Lorsque j'ai changé le nom de la classe en majuscule, puis que j'ai exécuté un composer dump-autoload, cela a fini par fonctionner pour moi. Ceci utilise Laravel 5.1, pour ce que ça vaut. 

1
Bay879

J'ai aimé ceci: 1. Ligne supprimée non existante migration de la table des migrations à partir de la base de données 2. Et lancez la commande php artisan migrate: refresh

Cela a aidé à résoudre mon problème. 

* toutes vos données seront supprimées des tables de la base de données 

1
Abduhafiz

Si artisan ne fonctionne pas du tout et continue à vous envoyer ce message, peu importe la commande que vous donnez, supprimez le fichier config.php du dossier bootstrap/cache.

Après cela courir à nouveau 

php artisan config:cache
0
Mihai Crăiță

J'ai eu le même problème. Quand je cherchais php artisan migrate:reset, j'ai eu Class 'CreateImagesTable' not found. Et composer dump-autoload n'a pas aidé. 

Ma solution était très simple:

  1. php artisan make:migration create_images_table --create=images
  2. composer dump-autoload
  3. Puis j'ai eu: SQLSTATE[HY000]: General error: 1 no such table: images (SQL: drop table "images") 
  4. donc, dans sqlite, j'ai saisi: CREATE TABLE `images` (...>` id` INTEGER ...>);
  5. Et puis php artisan migrate:reset 
  6. Maintenant je suis heureux à nouveau
0