From d8416d897b872eda0f2f05ce66fd822cb97356be Mon Sep 17 00:00:00 2001 From: michele Date: Fri, 11 Sep 2026 18:59:29 +0200 Subject: [PATCH] fix(migrations): support pgsql dialect in 2025_12_22_1200* update and constraint drop --- ...onto_id_to_contabilita_movimenti_banca.php | 22 +++++++--- ...dd_conto_id_to_contabilita_saldi_conti.php | 43 ++++++++++++------- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/database/migrations/2025_12_22_120000_add_conto_id_to_contabilita_movimenti_banca.php b/database/migrations/2025_12_22_120000_add_conto_id_to_contabilita_movimenti_banca.php index d373da3..8df388c 100755 --- a/database/migrations/2025_12_22_120000_add_conto_id_to_contabilita_movimenti_banca.php +++ b/database/migrations/2025_12_22_120000_add_conto_id_to_contabilita_movimenti_banca.php @@ -28,12 +28,22 @@ public function up(): void // Nota: per conti con iban NULL non è possibile discriminare senza un id. try { if (Schema::hasTable('dati_bancari')) { - DB::statement( - "UPDATE contabilita_movimenti_banca m " . - "JOIN dati_bancari d ON d.stabile_id = m.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = m.iban " . - "SET m.conto_id = d.id " . - "WHERE m.conto_id IS NULL AND m.iban IS NOT NULL AND m.iban != ''" - ); + if (DB::connection()->getDriverName() === 'mysql') { + DB::statement( + "UPDATE contabilita_movimenti_banca m " . + "JOIN dati_bancari d ON d.stabile_id = m.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = m.iban " . + "SET m.conto_id = d.id " . + "WHERE m.conto_id IS NULL AND m.iban IS NOT NULL AND m.iban != ''" + ); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + DB::statement( + "UPDATE contabilita_movimenti_banca m " . + "SET conto_id = d.id " . + "FROM dati_bancari d " . + "WHERE d.stabile_id = m.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = m.iban " . + "AND m.conto_id IS NULL AND m.iban IS NOT NULL AND m.iban != ''" + ); + } } } catch (Throwable) { // best-effort diff --git a/database/migrations/2025_12_22_120010_add_conto_id_to_contabilita_saldi_conti.php b/database/migrations/2025_12_22_120010_add_conto_id_to_contabilita_saldi_conti.php index 8e860c9..f09fdbb 100755 --- a/database/migrations/2025_12_22_120010_add_conto_id_to_contabilita_saldi_conti.php +++ b/database/migrations/2025_12_22_120010_add_conto_id_to_contabilita_saldi_conti.php @@ -27,12 +27,22 @@ public function up(): void // Backfill: collega saldi esistenti al conto (dati_bancari) per IBAN. try { if (Schema::hasTable('dati_bancari')) { - DB::statement( - "UPDATE contabilita_saldi_conti s " . - "JOIN dati_bancari d ON d.stabile_id = s.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = s.iban " . - "SET s.conto_id = d.id " . - "WHERE s.conto_id IS NULL AND s.iban IS NOT NULL AND s.iban != ''" - ); + if (DB::connection()->getDriverName() === 'mysql') { + DB::statement( + "UPDATE contabilita_saldi_conti s " . + "JOIN dati_bancari d ON d.stabile_id = s.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = s.iban " . + "SET s.conto_id = d.id " . + "WHERE s.conto_id IS NULL AND s.iban IS NOT NULL AND s.iban != ''" + ); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + DB::statement( + "UPDATE contabilita_saldi_conti s " . + "SET conto_id = d.id " . + "FROM dati_bancari d " . + "WHERE d.stabile_id = s.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = s.iban " . + "AND s.conto_id IS NULL AND s.iban IS NOT NULL AND s.iban != ''" + ); + } } } catch (Throwable) { // best-effort @@ -41,16 +51,17 @@ public function up(): void // Indici legacy: unique(stabile_id, iban, data_saldo) non permette più casse con iban NULL. // Passiamo a unique(stabile_id, conto_id, data_saldo) (più coerente con la UI per singolo conto). try { - Schema::table('contabilita_saldi_conti', function (Blueprint $table) { - $table->dropUnique(['stabile_id', 'iban', 'data_saldo']); - }); - } catch (Throwable) { - // ignore - } - try { - Schema::table('contabilita_saldi_conti', function (Blueprint $table) { - $table->dropIndex(['stabile_id', 'iban', 'data_saldo']); - }); + if (DB::connection()->getDriverName() === 'pgsql') { + DB::statement('ALTER TABLE "contabilita_saldi_conti" DROP CONSTRAINT IF EXISTS "contabilita_saldi_conti_stabile_id_iban_data_saldo_unique"'); + DB::statement('DROP INDEX IF EXISTS "contabilita_saldi_conti_stabile_id_iban_data_saldo_index"'); + } else { + Schema::table('contabilita_saldi_conti', function (Blueprint $table) { + $table->dropUnique(['stabile_id', 'iban', 'data_saldo']); + }); + Schema::table('contabilita_saldi_conti', function (Blueprint $table) { + $table->dropIndex(['stabile_id', 'iban', 'data_saldo']); + }); + } } catch (Throwable) { // ignore }