articles
テーブルSchema
が次のように定義されているブログがあります。
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');
}
テーブルの既存のデータを失うことなく、列comment_count
およびview_count
を削除したい
次のような新しい移行を定義しました。
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');
});
}
}
そしてphp artisan migrate
をしました。移行は成功しましたが、2つの列は削除されません。
私は何を間違えていますか?テーブル内の既存のデータを失わずにこれらの列を削除するにはどうすればよいですか?
移行は次のようになります。
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');
});
}
}
UpメソッドのdropColumn。これは、新しい移行ではこの列を削除するためです。ロールバックを行うと、2つの列がもう一度あります
配列の列をdropColumn関数に渡すことで、複数の列を1行でドロップできます。
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');
});
}
}
foregin key制約を持っている場合は、まず外部キーインデックスの関連付けを削除してから、次のようなストレッチで他のユーザーと共に列をdropColumn関数に渡すことができます
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']);
});
}