J'ai un blog pour lequel la articles
table Schema
est définie comme suit:
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->string('title');
$table->string('thumb')->nullable();
$table->text('excerpt');
$table->text('body');
$table->string('slug')->unique();
$table->integer('comment_count')->unsigned()->default(0);
$table->integer('view_count')->unsigned()->default(0);
$table->timestamps();
$table->softDeletes();
}
public function down()
{
Schema::drop('articles');
}
Je veux supprimer les colonnes comment_count
et view_count
sans perdre les données existantes dans la table
J'ai défini une nouvelle migration comme ceci:
class RemoveCommentViewCount extends Migration
{
public function up()
{
//nothing here
}
public function down()
{
Schema::table('articles', function($table) {
$table->dropColumn('comment_count');
$table->dropColumn('view_count');
});
}
}
et j'ai fait php artisan migrate
. La migration a été effectuée avec succès, mais les deux colonnes ne sont pas supprimées.
Qu'est-ce que je fais mal? Comment puis-je supprimer ces colonnes sans perdre les données existantes dans la table?
Votre migration doit ressembler à ceci:
Class RemoveCommentViewCount extends Migration
{
public function up()
{
Schema::table('articles', function($table) {
$table->dropColumn('comment_count');
$table->dropColumn('view_count');
});
}
public function down()
{
Schema::table('articles', function($table) {
$table->integer('comment_count');
$table->integer('view_count');
});
}
}
La méthode dropColumn dans la méthode up, car avec la nouvelle migration, vous souhaitez supprimer ces colonnes. Si vous faites une restauration, vous avez une autre fois les deux colonnes
Même peut même supprimer les colonnes multiples en une seule ligne en passant colonne de tableau à dropColumn function.
Class RemoveCommentViewCount extends Migration
{
public function up()
{
Schema::table('articles', function($table) {
$table->dropColumn(['comment_count', 'view_count']);
});
}
public function down()
{
Schema::table('articles', function($table) {
$table->integer('comment_count');
$table->integer('view_count');
});
}
}
Au cas où votre contrainte foregin key contraindrait tout d’abord, supprimez l’association d’index de clé étrangère, puis transmettez la colonne à la fonction dropColumn avec les autres fonctions de la manière suivante
public function up()
{
Schema::table('customer_orders', function($table) {
$table->dropForeign(['product_id']);
$table->dropForeign(['shipping_address_id']);
$table->dropColumn(['product_id', 'shipping_address_id', 'column1', 'column2']);
});
}
Ajoutez simplement ce code dans votre fichier down () function dans le fichier migration.php
Schema::table('articles', function (Blueprint $table) {
$table->integer('comment_count')->unsigned()->default(0);
$table->integer('view_count')->unsigned()->default(0);
});
puis lancez -> php artisan migrate: rollback