it-swarm.com.ru

Laravel сбросить иностранный ключ в миграции

Я хочу создать миграцию, которая будет отбрасывать таблицу. Я создал миграцию так:

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
5
Jon not doe xx

Вам просто нужно отключить проверку внешнего ключа перед тем, как отбросить таблицу, а затем включить их снова после этого:

DB::statement('SET FOREIGN_KEY_CHECKS=0;');
Schema::dropIfExists('devices');
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
1
Jason Grim

Вы можете использовать этот ответ. https://stackoverflow.com/a/30177480/8513937

Передайте dropForeign имя столбца в виде массива. Внутри Laravel удаляет связанный внешний ключ.

$table->dropForeign(['client_id']);
3
gandarrillas

Просто отбросьте всю таблицу ( документация ):

Schema::drop('devices');
3
Jonas Staudenmeir

Попробуйте это способами ...

  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');
    });
  }
0
Laurazel8