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を使用して存在しない場合にテーブルを作成する方法はありますか?
これを試して
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();
}
}
新しいテーブルを作成するには、Laravel= Schema function hasTable
。]によるチェックが1つだけあります。
ただし、テーブルの存在を確認する前にテーブルを削除する場合、SchemaにはdropIfExists
という関数があります。
Schema::dropIfExists('table_name');
テーブルが存在する場合、テーブルを削除します。
DB::transaction(function () {
// Create your table here with schema builder.
});
トランザクションクロージャ内で例外がスローされると、トランザクションは自動的にロールバックされます。そのため、既存のテーブルを作成しようとするとエラーがスローされます。ほとんどのデータベーストランザクションでは、Laravelでこのクロージャが必要です。