fixed api and migrations
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
<?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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user