Je veux créer une migration qui doit déposer une table. J'ai créé la migration comme ceci:
Schema::table('devices', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('client_id')->nullable();
$table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade');
});
Et maintenant j'essaye de le laisser tomber comme ça:
Schema::table('devices', function (Blueprint $table) {
$table->dropForeign('devices_client_id_foreign');
$table->drop('devices');
});
Mais j'obtiens l'erreur suivante:
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:
modifier la table
devices
supprimer la clé étrangèredevices_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
Il vous suffit de désactiver les vérifications de clés étrangères avant de supprimer la table, puis de les réactiver après ceci
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
Schema::dropIfExists('devices');
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
Vous pouvez utiliser cette réponse. https://stackoverflow.com/a/30177480/8513937
Transmettez à dropForeign le nom de la colonne sous forme de tableau. En interne, Laravel supprime la clé étrangère associée.
$table->dropForeign(['client_id']);
Il suffit de déposer la table entière ( documentation ):
Schema::drop('devices');
Essayez de cette façon ...
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');
});
}