J'ai précédemment créé la table des utilisateurs. Maintenant, j'ai créé une nouvelle migration pour créer une nouvelle table de livres dans mon schéma. Quand j'essaye de lancer la commande
php artisan migrate
Ça montre:
[Illuminate\Database\QueryException]
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' alre
ady exists (SQL: create table `users` (`id` int unsigned not null auto_incr
ement primary key, `username` varchar(255) not null, `email` varchar(255) n
ot null, `password` varchar(255) not null, `created_at` timestamp default 0
not null, `updated_at` timestamp default 0 not null) default character set
utf8 collate utf8_unicode_ci)
Voici ma nouvelle table de migration:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateBooksTable extends Migration {
public function up()
{
Schema::create('books', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('auther');
$table->string('area');
$table->timestamps();
});
}
public function down()
{
Schema::drop('books');
}
}
Comment puis-je me débarrasser de l'erreur?
Vous devez courir
php artisan migrate:rollback
si cela échoue également, il vous suffit d’abandonner toutes les tables que vous devrez peut-être traiter, car il semble que votre table de migration soit perturbée ou que votre table utilisateur lors de l’exécution d’une précédente restauration n’a pas été supprimée.
MODIFIER:
La raison en est que vous avez déjà effectué une restauration et que le code contenait une erreur ou que la table n'a pas été supprimée. Cependant, cela perturbe toujours la table de migration laravel et, en ce qui concerne cette tâche, vous n’avez plus aucune trace de remonter la table utilisateur. La table utilisateur existe déjà cependant et cette erreur est renvoyée.
J'ai eu le même problème. La raison en est que votre nom de fichier dans le dossier migrations ne correspond pas à nom de migration dans votre base de données (voir le tableau des migrations). Ils devraient être les mêmes.
Vous pouvez aussi insérer avant Schema::create('books', function(Blueprint $table)
le code suivant Schema::drop('books');
EDIT: (pour laravel)
Je suis tombé sur ce problème alors que je travaillais sur un projet à Laravel. Mes tables étaient en désordre, nécessitant de fréquentes modifications de colonnes. Une fois les tables installées, je n’étais plus capable de lancer php artisan migrate
.
J'ai fait suite pour me débarrasser de la question-
$ composer dump-autoload -o
php artisan migrate
Commentaire précédent concernant le lumen
[Et bien, assez tard pour la fête (et peut-être une fête différente de celle que je cherchais). Je me suis cogné la tête, j'ai crié à haute voix et, par la grâce du crâne gris, j'ai trouvé une solution.]
Je développe une application reposante en utilisant Lumen et je suis novice dans ce domaine. Ceci est mon premier projet/expérience utilisant laraval et Lumen. Mes dépendances
"require": {
"php": ">=5.6.4",
"laravel/Lumen-framework": "5.4.*",
"vlucas/phpdotenv": "~2.2",
"barryvdh/laravel-cors": "^0.8.6",
"league/fractal": "^0.13.0"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"phpunit/phpunit": "~5.0",
"mockery/mockery": "~0.9.4"
}
Quoi qu'il en soit, tout allait bien jusqu'à hier soir mais tout à coup, phpunit
a commencé à se plaindre d'une table déjà existante.
Caused by
PDOException: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'items' already exists
Duh! La table Items
devrait exister dans la base de données, sinon, comment suis-je censé enregistrer des éléments!
Quoi qu'il en soit, le problème persiste seulement dans les classes de test, mais étrangement pas dans le navigateur (j'ai vérifié avec les en-têtes chrome, firefox et postman). J'obtenais les réponses JSON avec les données attendues.
J'ai abandonné la base de données et l'ai recréée avec beaucoup de migrate
, refresh
, rollback
. Tout allait bien mais dans phpunit
.
En désespoir de cause, j'ai supprimé mes fichiers de migration (bien sûr, j'ai d'abord effectué une sauvegarde), puis cliqué sur phpunit
dans le terminal. Même chose encore une fois.
Tout à coup, je me suis rappelé que j'avais mis un nom de base de données différent dans le fichier phpunit.xml
uniquement à des fins de test. J'ai vérifié cette base de données et devinez quoi! Il y avait une table nommée items
. J'ai supprimé cette table manuellement, lancez phpunit
, tout a bien fonctionné.
Je documente mon expérience pour des références futures uniquement et j'espère que cela pourra aider quelqu'un à l'avenir.
J'ai hérité d'un mauvais code de quelqu'un qui n'utilisait pas les migrations!?, Afin de coller manuellement les noms de fichiers dans les migrations, en oubliant de supprimer le .php final.
Cela a donc provoqué l'erreur 'table existe' malgré le nom du fichier et la correspondance de la migration.
2018_05_07_142737_create_users_table.php - WRONG 2018_05_07_142737_create_users_table - CORRECT
Vous pouvez utiliser php artisan migrate:fresh
pour supprimer toutes les tables et migrer ensuite ...__
J'ai eu un problème similaire après avoir joué avec les contraintes de clé étrangère. Un de mes tableaux (notes) avait disparu et un autre revenait (tâches) même après l'avoir laissé tomber dans MySQL, m'empêchant de lancer: php artisan migrate/refresh/reset
, qui produisait l'exception 42s01 ci-dessus.
Ce que j’ai fait pour le résoudre était ssh en vagrant, puis dans MySQL (vagrant ssh, mysql -u Homestead -p secret
), puis: DROP DATABASE Homestead; Then CREATE DATABASE Homestead; Then exit mysql and run:
php artisan migrate`.
Évidemment, cette solution ne fonctionnera pas pour les personnes n'utilisant pas vagrant/Homestead . Ne prétendant d'aucune façon que ce soit un flux de travail correct, mais cela a résolu mon problème, qui ressemble beaucoup à celui ci-dessus.
Je pense que ma réponse aidera plus. J'ai aussi fait face à cette erreur. Ensuite, j'ai supprimé un fichier de migration spécifique et essayé de recréer par php artisan.
Mais avant d’obtenir ce point il ya 1 ou 2 jours, alors que je regardais des vidéos de laracast sur la migation, je pensais revenir en arrière et migrer un tableau spécifique. Pour une raison quelconque, j'ai supprimé un fichier de migration spécifique et essayé de recréer, mais ce faisant, j'ai obtenu:
[ErreurException] include (C:\wamp64\www\laraveldeneme\vendor\composer /../../ base de données/migrations/2017_01_09_082715_create_articles_table.php): impossible d'ouvrir le flux: aucun fichier ni répertoire
Quand j'ai vérifié ce fichier, j'ai vu la ligne ci-dessous en haut du tableau dans le fichier autoload_classmap.php:
'CreateArticlesTable' => $ baseDir. '/ Database/migrations/2017_01_09_083946_create_articles_table.php',
Malgré la restauration ou la suppression d'un fichier de migration, l'enregistrement associé au fichier de migration reste dans le fichier composer autoload_classmap.php.
Pour résoudre ce problème, j'ai trouvé la commande composer ci-dessous, dont je ne me souviens plus.
composer dump-autoload
Lorsque je Rand ce code, la ligne liée au fichier de migration que j'ai supprimé est parti. Puis j'ai couru:
php artisan make:migration create_articles_table --create=articles
Enfin, j'ai recréé mon fichier de migration avec le même nom
allez dans phpmyadmin et déposez la base de données que vous avez créée pour Laravel puis créez-la à nouveau, puis accédez à cmd (si vous utilisez Windows), saisissez le projet racine et tapez php artisan migrate.
Après la restauration, vérifiez vos tables, assurez-vous de les supprimer.
S'il y a un problème, supprimez manuellement les tables de l'application de base de données comme phpmyadmin (j'utilise Sequel Pro pour Mac).
Corrigez vos méthodes de down dans la migration.
Remarque: effectuez une restauration puis effectuez une migration. N'utilisez pas migrate: refresh pour remarquer l'emplacement de l'erreur.
Après cela, vous pourrez tester avec une nouvelle base de données. détecter où est le problème.
Essayez aussi de lire cette question
php artisan migrate:rollback
Solution de vérification: Solution officielle de Laravel
Comme indiqué dans le document Migrations guide , pour résoudre ce problème, il vous suffit de modifier votre fichier app\Providers\AppServiceProvider.php et, dans la méthode de démarrage, définissez une longueur de chaîne par défaut:
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
Après la commande ci-dessus, vous devez supprimer toutes les tables restantes manuellement, puis exécuter la commande:
php artisan migrate:fresh
Vous pouvez supprimer toutes les tables mais ce ne sera pas une bonne pratique, essayez plutôt cette commande
php artisan migrate:fresh
Assurez-vous d'utiliser correctement la convention de dénomination. J'ai testé cela dans la version laravel 5.7 Il est important de ne pas essayer cette commande lorsque votre site est sur le serveur car il supprime toutes les informations.
Commencez par déposer la table des utilisateurs dans la base de données. Ensuite, allez à l'invite de commande et tapez
php artisan migrate
tous les ensembles.Je pense que cette réponse aide.
Ajouter ceci à AppServiceProvider.php
use Illuminate\Support\Facades\Schema;
public function boot() {
Schema::defaultStringLength(191);
}
Supprimez toutes les tables manuellement à la phpmyadmin.
Accédez à chaque fichier de migration dans la base de données/migrations. Recherchez et supprimez ces 2 codes:
a) -> index () (trouvé à 2014_10_12_100000_create_password_resets_table.php à la ligne 17)
b) -> unique () (trouvé à 2014_10_12_000000_create_users_table.php à la ligne 19)
Exécutez "php artisan migrate".
Terminé.
Je pense que cela se produit car la dernière classe laravel (au 12 février 2018) a supprimé la fonction -> index () et -> unique ().
J'ai résolu votre problème en supprimant la table "utilisateur" dans sequel-pro (il n'y a pas de données dans ma table utilisateur) et vous pouvez ensuite exécuter php artisan migrate
Voici avant et après les captures d'écran
avant de supprimer l'utilisateur de la table utilisateur
2014_10_12_100000_create_password_resets_table.php
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email');
$table->string('token');
$table->timestamp('created_at')->nullable();
});
2014_10_12_000000_create_users_table.php
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email');
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
J'étais également confronté au même problème, j'ai suivi le même processus mais mon problème n'était pas résolu alors j'essayais autre chose. J'ai supprimé les tables de ma base de données et utilise un fichier d'en-tête
use Illuminate\Support\Facades\Schema;
et augmentez la longueur de chaîne par défaut dans la méthode de démarrage pour ajouter ceci: -
Schema::defaultStringLength(191);
puis à nouveau migrer. Le problème est résolu, toutes les tables sont créées dans la base de données.
Dans laravel 5.4, Si vous rencontrez ce problème. Vérifiez ce lien
-ou-
Allez sur cette page dans app/Providers/AppServiceProvider.php Et ajoutez le code ci-dessous
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
J'ai eu le même problème, le problème est dans le nom enregistré dans la table migrations à l'intérieur de la base de données, parce que dans ma base de données existe 2017_10_18_200000_name
et dans les fichiers 2016_10_18_200000_name
, après avoir changé le nom du fichier qui fonctionne.
DANGER- la plupart de ces réponses effaceront votre base de données et ne sont pas recommandées pour une utilisation en production.
Il est clair qu'il existe de nombreuses "solutions" à ce problème, mais toutes ces solutions que j'ai lues sont des solutions très destructrices et aucune d'entre elles ne fonctionne pour une base de données de production. Sur la base du nombre de solutions, il semble également que cette erreur pourrait avoir plusieurs causes.
Mon erreur était due à une entrée manquante dans ma table des migrations. Je ne sais pas exactement comment cela s'est passé, mais en le rajoutant, je n'ai plus reçu l'erreur.
Modifier AppServiceProvider.php se trouvera à app/Providers/AppServiceProvider.php et ajouter
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
Puis courir
composer update
Sur votre terminal ... Cela m'a aidé, peut-être que cela fonctionnera aussi pour vous.
Supprimer toutes les tables de base de données et exécuter cette ligne dans votre chemin de projet via CMD
php artisan migrate
J'ai aussi eu ce problème, je viens de trouver cette réponse sur Youtube Video . Je ne sais pas si c'est idéal, mais c'est le meilleur que j'ai vu.
Semble le fichier AppServiceProvider.php
du répertoire des fournisseurs en donnant une longueur au schéma. Dans ce cas, 191
. Fonctionne comme par magie. Capture d'écran . Il a ensuite lancé: php artisan migrate:fresh
. J'espère que ça marche.
Commencez par vérifier la table migrations dans votre base de données et assurez-vous que vos fichiers de migration dans le dossier de la base de données de votre projet sont égaux à ceux de cette table. Parfois, si vous créez manuellement des fichiers de migration, cette erreur apparaît lorsque vous exécutez la commande migrate dans composer.
Vous pouvez toujours vérifier l'existence d'une table avant de la créer.
if(!Schema::hasTable('books')){
Schema::create('books', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('auther');
$table->string('area');
$table->timestamps();
});
}
La création d'une base de données prend littéralement des secondes ........ Exportez votre base de données actuelle au cas où elle contiendrait des données sensibles . Vérifiez vos migrations et éliminez toutes les méthodes incorrectes qu'il contient . __. php artisan migrate Ensuite, vous pouvez renvoyer les données précédemment dans la base de données . Fonctionne !!!
Solution: Le tableau de migration Laravel existe déjà ... || Cela fonctionne dans Laravel 5.8 aussi
fichier app\Providers\AppServiceProvider.php
et dans la méthode de démarrage, définissez une longueur de chaîne par défaut:
public function boot()
{
Schema::defaultStringLength(191);
}
et ouvert
config\database.php
'charset' =>'utf8mb4',
'collation' =>'utf8mb4_unicode_ci',
et changez-le en
'charset' =>'utf8',
'collation' =>'utf8_unicode_ci',
enregistrer tous les fichiers et aller à la commande Invite
php artisan migrate