J'ai créé la migration en utilisant le
Schema::table('packages', function (Blueprint $table) { $table->dropForeign('star_id'); //$table->dropIndex('star_id'); //also tried dropIndex $table->dropColumn('star_id'); });
suivant dans la partie de dépôt
Schema::table('packages', function (Blueprint $table) { $table->integer('star_id')->unsigned()->index()->nullable()->default(null); $table->foreign('star_id')->references('id')->on('star'); });
mais cela lance pour index et étranger
SQLSTATE [HY000]: Erreur générale: 1553 Impossible de supprimer l'index
'packages_star_id_index': nécessaire dans une contrainte de clé étrangère (SQL:
alter table packages
drop star_id
)
erreur pour dropForeign
SQLSTATE [42000]: Erreur de syntaxe ou violation d'accès: 1091 Can't DROP 'star_id'; vérifier que la colonne / clé existe (SQL: alter table
packages
déposer la clé étrangèrestar_id
)
Je ne peux pas revenir en arrière à cause de l'erreur.
3 Réponses :
Vous devez transmettre le nom de la clé étrangère vous-même ou transmettre le nom de la colonne dans un tableau pour que laravel le construise automatiquement.
Voir ici :
Si l '"index" donné est en fait un tableau de colonnes, le développeur signifie supprimer un index simplement en spécifiant les colonnes impliquées sans le nom conventionnel, nous allons donc construire le nom de l'index à partir de les colonnes.
Schema::table('packages', function (Blueprint $table) { $table->dropForeign(['star_id']); $table->dropColumn('star_id'); });
Dans votre cas, passez simplement la colonne dans un tableau:
// laravel assumes star_id is the foreign key name $table->dropForeign('star_id'); // laravel builds the foreign key name itself e.g. packages_star_id_foreign $table->dropForeign(['star_id']);
Basé sur la documentation Laravel 7, pour déposer une clé étrangère ce code fonctionnera:
$table->dropForeign(['user_id']);
dans lequel "posts" est le nom de la table, "user_id" est le nom de la clé étrangère et "étranger" est le suffixe.
Il y a également une autre méthode qui ne transmet que le nom de la clé étrangère dans un tableau comme celui-ci:
$table->dropForeign('posts_user_id_foreign');
cette image provient du site Web de Laravel (v 7.x): ici
Blockquote SQLSTATE [HY000]: Erreur générale: 1553 Impossible de supprimer l'index 'packages_star_id_index': nécessaire dans une contrainte de clé étrangère (SQL: alter table packages drop star_id)
Selon votre erreur, le nom de l'index était "packages_star_id_index". vous devez mentionner le nom d'index correct dans la fonction dropForeign.
essayez:
Schema::table('packages', function (Blueprint $table) { $table->dropForeign('packages_star_id_index'); $table->dropColumn('star_id'); });