テーブルを削除するマイグレーションを作成したい。私はこのように移行を作成しました:
Schema::table('devices', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('client_id')->nullable();
$table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade');
});
そして今、私はそれをこのように落とそうとします:
Schema::table('devices', function (Blueprint $table) {
$table->dropForeign('devices_client_id_foreign');
$table->drop('devices');
});
しかし、私は次のエラーを受け取ります:
In Connection.php line 664: SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'devices_client_id_foreign'; check that column/key exists (SQL:
テーブルの変更
devices
外部キーの削除devices_client_id_foreign
)In PDOStatement.php line 144: SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'devices_client_id_foreign'; check that column/key exists In PDOStatement.php line 142: SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'devices_client_id_foreign'; check that column/key exists
テーブルを削除する前に外部キーのチェックを無効にし、次のように再度有効にする必要があります。
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
Schema::dropIfExists('devices');
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
この回答を使用できます。 https://stackoverflow.com/a/30177480/8513937
列名を配列としてdropForeignに渡します。内部的には、Laravelは関連する外部キーを削除します。
$table->dropForeign(['client_id']);
テーブル全体を削除するだけです( documentation ):
Schema::drop('devices');
この方法を試してください...
public function down()
{
Schema::dropIfExists('devices');
}
//Or this
public function down(){
Schema::table('devices', function (Blueprint $table) {
$table->dropForeign(['client_id']);
$table->dropColumn('client_id');
$table->drop('devices');
});
}