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
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');
}
}
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
autoload_psr4.php
et vide presque le autoload_classmap.php
.autoload_classmap.php
.À partir de ce moment, vous n'aurez plus à refaire cette opération et toute nouvelle migration fonctionnera correctement.
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
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
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.
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.
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.
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é.
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
.
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.
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.
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:]
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. :)
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.
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