web-dev-qa-db-ja.com

スキーマビルダー:存在しない場合はテーブルを作成

Schema Builderで以下のコードを使用してテーブルを作成しています。

Schema::create('tblCategory', function (Blueprint $table) {
    $table->increments('CategoryID');
    $table->string('Category', 40);
    $table->unique('Category', 'tblCategory_UK_Category');
    $table->timestamps();
});

問題は、新しいテーブルを作成する必要がある場合、すべての古いスクリプトが実行され、テーブルが既に存在するというエラーが表示されることです。

schema Builderを使用して存在しない場合にテーブルを作成する方法はありますか?

27
Pankaj

これを試して

if (!Schema::hasTable('tblCategory')) {
     Schema::create('tblCategory', function($table){
            $table->engine = 'InnoDB';
            $table->increments('CategoryID');
            $table->string('Category', 40);
            $table->unique('Category', 'tblCategory_UK_Category');
            $table->timestamps();
    }
}
48
paranoid

ここで答えを確認してください

新しいテーブルを作成するには、Laravel= Schema function hasTable。]によるチェックが1つだけあります。

ただし、テーブルの存在を確認する前にテーブルを削除する場合、SchemaにはdropIfExistsという関数があります。

Schema::dropIfExists('table_name');

テーブルが存在する場合、テーブルを削除します。

6
DB::transaction(function () {
        // Create your table here with schema builder.
});

トランザクションクロージャ内で例外がスローされると、トランザクションは自動的にロールバックされます。そのため、既存のテーブルを作成しようとするとエラーがスローされます。ほとんどのデータベーストランザクションでは、Laravelでこのクロージャが必要です。

https://laravel.com/docs/5.6/database

0
Hexxefir