web-dev-qa-db-fra.com

Laravel migrations: Classe "non trouvé"

Je déploie un projet barebone Laravel) sur Microsoft Azure, mais chaque fois que j'essaie d'exécuter php artisan migrate Je reçois l'erreur:

[2015-06-13 14:34:05] production.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' avec le message 'Classe' 'introuvable' dans D:\home\site\vendor\laravel\framework\src\Illuminate\Database\Migrations\Migrator.php: 328

Trace de la pile:

 #0 {main}  

Quel pourrait être le problème? Merci beaucoup

-- modifier --

Classe de migration

<?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->bigIncrements('id');
            $table->string('name', 50);
            $table->string('surname', 50);
            $table->bigInteger('telephone');
            $table->string('email', 50)->unique();
            $table->string('username', 50)->unique();
            $table->string('password', 50);
            $table->boolean('active')->default(FALSE);
            $table->string('email_confirmation_code', 6);
            $table->enum('notify', ['y', 'n'])->default('y');
            $table->rememberToken();
            $table->timestamps();

            $table->index('username');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }
}
53
Washery

Pour les utilisateurs du chargeur automatique PSR-4 (composer.json):

Conservez le dossier migrations dans le tableau classmap et ne l'incluez pas dans l'objet psr-4 sous autoload. En tant que classe principale de migration, Migrator ne prend pas en charge l'espacement de noms. Par exemple;

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

Puis lancez:

php artisan clear-compiled 
composer dump-autoload
php artisan optimize
  • Le premier efface tous les fichiers compilés.
  • Deuxième met à jour le autoload_psr4.php et vide presque le autoload_classmap.php.
  • La troisième met à jour le autoload_classmap.php.

À partir de ce moment, vous n'aurez plus à refaire cette opération et toute nouvelle migration fonctionnera correctement.

88
Umair Ahmed

Si vous obtenez le message "Erreur de classe non trouvée" lors de l'exécution de migrations, essayez d'exécuter cette commande.

composer dump-autoload 

puis relancez la commande migrate. Voir plus de détails sur le site officiel (#Running Migrations): http://laravel.com/docs/master/migrations#running-migrations

36
Jambor - MSFT

Assurez-vous simplement que votre nom de fichier de migration est identique à votre nom de classe.

c'est à dire:

Si nomfichier est:

xxx_151955_create_post_translations_table.php

Alors la classe devrait être:

CreatePostTranslationsTable

18
Mohammad Kawsara

J'ai eu ce même problème il y a quelque temps. Apparemment, c’est un problème courant, car dans la documentation de Laravel, il est même suggéré: http://laravel.com/docs/master/migrations#running-migrations

Fondamentalement, tout ce que vous avez à faire est d’actualiser certains fichiers composer. Il suffit d’exécuter:

composer dump-autoload

Cela actualisera composer les fichiers à chargement automatique, puis vous pourrez exécuter votre migration normale et cela devrait fonctionner! Bien au mieux.

12
jacurtis

je cours aussi dans le même problème.

La solution pour moi était de supprimer le fichier de migration ET de supprimer l'enregistrement de la table "migrations" de la base de données.

Après cela, j'ai couru

composer dump-autoload

et a finalement pu réinitialiser/annuler les migrations.

8
Al Masum Fahim

J'ai supprimé l'un des fichiers de migration. fait face au même problème, alors que php artisan migrate:rollback

Puis j'ai essayé composer dump-autoload. Encore la même chose s'est produite.

J'ai restauré le fichier supprimé et essayé composer dump-autoload et php artisan migrate:rollback. Ça marche.

6
m2j

Pour moi, le problème était que j'avais nommé ma migration 2017_12_15_012645_create_modules_problems.php, avec le nom de classe CreateModulesProblemsTable. Dès que j'ai ajouté _table au nom du fichier, tout a bien fonctionné.

5
Matthew Park

Je pense qu'il est tard pour répondre à cette question mais peut-être que cela aidera quelqu'un.

Si vous avez modifié le nom du fichier de migration, assurez-vous de son nom de classe interne.

Par exemple, si je modifie un nom de migration de 2018_06_10_079999_create_admins_table.php à 2018_06_10_079999_create_managers_table.php donc son nom de classe interne doit également passer de CreateAdminsTable à CreateManagerTable.

4
Behnam Azimi

J'ai eu une situation similaire (erreur de classe introuvable) après avoir déplacé un projet de développement Laravel 5.2) à la production. Le serveur de production recherchait la classe "projet" mais le nom du contrôleur était Project.php. J'ai renommé le fichier en project.php c'était bien aller.

3
mediaguru

J'avais bêtement mis:

namespace database\migrations;

Dans ma migration, create_users_table.php [2014_10_12_000000_create_users_table.php]

Je recevais une erreur similaire - Classe 'CreateUsersTable' non trouvée.

Supprimer cette ligne en haut a résolu cette erreur.

2
Joshua

Je recevais la même erreur de classe non trouvée en essayant de migrer mon projet. Parfois, ce sont les choses simples qui vous attirent. Dans mon cas, j'ai remarqué que le nom de ma classe n'était pas correct dans mon fichier de migration car je faisais un changement de changement de nom très tôt et je ne le réalisais pas.

Après avoir corrigé le nom de la classe, j'ai effectué un composer dump-autoload et mon problème est parti.

HTH quelqu'un:]

2
Stu

supprimez simplement la ligne de votre base de données sur la table migrations et cela résoudra le problème. Cela ne s'affichera plus lorsque vous ferez des migrations

l’autre moyen est de créer simplement le fichier, cela dépend de ce que vous voulez, dans mon cas, je voulais me débarrasser de cette migration. :)

1
Dimitar

Dans mon cas, l'incrémentation automatique de la base de données a été effectuée. Dans le passé, je supprimais manuellement une entrée, et AUTO_INCREMENT en désignait un de plus que le prochain identifiant de la table.

Apparemment Laravel utilise AUTO_INCREMENT- 1 pour savoir quelle a été la dernière migration effectuée.

0
By-Jokese

Assurez-vous simplement que les deux fichiers suivants contiennent le nom de classe et le nom de migration corrects:

C:\xampp\htdocs\StuffSpot\vendor\composer\autoload_classmap.php C:\xampp\htdocs\StuffSpot\vendor\composer\autoload_static.php

0
Abdallah Sakre