single_purchases: type-ENUM um depublication erweitern
Die create-Migration baut das ENUM dynamisch aus SinglePurchaseType::cases(); Datenbanken von vor dem T12-Case kannten depublication daher nicht und der Depublikations-Checkout brach mit "Data truncated for column 'type'" ab. Die Migration gleicht das ENUM per MODIFY COLUMN auf den aktuellen Case-Stand ab (nur MySQL; frische DBs bekommen die volle Liste ohnehin über die create-Migration). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
d7f17bbc76
commit
930760a056
1 changed files with 45 additions and 0 deletions
|
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
use App\Enums\SinglePurchaseType;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
/**
|
||||
* Die create-Migration baut das type-ENUM dynamisch aus
|
||||
* SinglePurchaseType::cases() — Datenbanken, die vor dem
|
||||
* Depublication-Case (T12) migriert wurden, kennen den Wert daher
|
||||
* nicht ("Data truncated for column 'type'", QA-Befund 07.07.).
|
||||
* Gleicht das ENUM auf den aktuellen Case-Stand ab; frische
|
||||
* Datenbanken (u. a. SQLite-Tests) erhalten die volle Liste bereits
|
||||
* über die create-Migration.
|
||||
*/
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
if (DB::connection()->getDriverName() !== 'mysql') {
|
||||
return;
|
||||
}
|
||||
|
||||
DB::statement(sprintf(
|
||||
'ALTER TABLE single_purchases MODIFY COLUMN `type` ENUM(%s) NOT NULL',
|
||||
$this->enumList(),
|
||||
));
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
// Kein Rückbau: ein verengtes ENUM würde vorhandene
|
||||
// Depublikations-Käufe abschneiden.
|
||||
}
|
||||
|
||||
private function enumList(): string
|
||||
{
|
||||
$values = array_map(
|
||||
static fn (SinglePurchaseType $type): string => $type->value,
|
||||
SinglePurchaseType::cases(),
|
||||
);
|
||||
|
||||
return "'".implode("','", $values)."'";
|
||||
}
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue