Files
yogibook_aury_new/db/migrations/20260813114707_convert_quantityclass_to_int.php
2026-08-21 18:44:24 +02:00

50 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
use Phinx\Migration\AbstractMigration;
/**
* Converte orderbook.quantityclass da varchar(20) a INT.
*
* quantityclass rappresenta il numero di ticket acquistati: viene usato in
* confronti e aritmetica (offset, LIMIT, conteggi). Tenerlo come stringa
* causa confronti errati ("10" < "9") e comportamenti imprevisti.
*
* PRIMA di cambiare il tipo, bonifica i valori esistenti: elimina spazi e
* azzera i valori non numerici / vuoti, altrimenti la conversione li
* troncherebbe in modo silenzioso.
*/
final class ConvertQuantityclassToInt extends AbstractMigration
{
public function up(): void
{
// 1) Bonifica: rimuovi spazi ai bordi
$this->execute("UPDATE orderbook SET quantityclass = TRIM(quantityclass) WHERE quantityclass IS NOT NULL");
// 2) Bonifica: i valori non interamente numerici o vuoti diventano 0
// (REGEXP '^[0-9]+$' = solo cifre). Rivedi manualmente eventuali 0
// risultanti dopo la migration se non te li aspetti.
$this->execute("UPDATE orderbook SET quantityclass = '0' WHERE quantityclass IS NULL OR quantityclass = '' OR quantityclass NOT REGEXP '^[0-9]+$'");
// 3) Cambia il tipo di colonna a INT
$table = $this->table('orderbook');
$table->changeColumn('quantityclass', 'integer', [
'null' => true,
'default' => null,
'signed' => true,
])->update();
}
public function down(): void
{
// Ripristina varchar(20). I valori numerici restano validi come stringa.
$table = $this->table('orderbook');
$table->changeColumn('quantityclass', 'string', [
'limit' => 20,
'null' => true,
'default' => null,
])->update();
}
}