Skip to content

Commit 51b0a02

Browse files
committed
hotfix: replace ->change() with raw ALTER TABLE in nullable migration
The previous migration used: $table->unsignedTinyInteger('orchestrator_priority') ->default(50)->nullable()->change(); ->change() delegates to Doctrine DBAL to introspect the existing column type before rewriting it. Doctrine does not have a registered mapping for MySQL's TINYINT, so it throws: Unknown column type "tinyinteger" requested. Any Doctrine type that you use has to be registered with Doctrine\DBAL\Types\Type::addType(). Fix: replace the Blueprint::change() call with a raw DB::statement() ALTER TABLE that modifies the column directly. This is fully portable across all MySQL/MariaDB versions supported by Fleetbase and has no dependency on Doctrine DBAL type mappings.
1 parent 8988629 commit 51b0a02

1 file changed

Lines changed: 17 additions & 10 deletions

File tree

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
<?php
22

33
use Illuminate\Database\Migrations\Migration;
4-
use Illuminate\Database\Schema\Blueprint;
5-
use Illuminate\Support\Facades\Schema;
4+
use Illuminate\Support\Facades\DB;
65

76
/**
87
* Make `orchestrator_priority` nullable on the orders table.
@@ -20,24 +19,32 @@
2019
* application layer (Order model + controllers) already coerces null to 50,
2120
* so NULL values will not appear in practice; the nullable flag is a
2221
* belt-and-suspenders safety net for any code path that may have been missed.
22+
*
23+
* NOTE: We use raw DB::statement() instead of Blueprint::change() because
24+
* ->change() relies on Doctrine DBAL to introspect the existing column type,
25+
* and Doctrine does not recognise MySQL's TINYINT as a mapped type
26+
* ("Unknown column type tinyinteger requested"), causing the migration to
27+
* crash on deployment. The raw ALTER TABLE statement is portable across all
28+
* MySQL/MariaDB versions supported by Fleetbase and requires no extra
29+
* dependencies.
2330
*/
2431
return new class extends Migration {
2532
public function up(): void
2633
{
27-
Schema::table('orders', function (Blueprint $table) {
28-
$table->unsignedTinyInteger('orchestrator_priority')->default(50)->nullable()->change();
29-
});
34+
DB::statement(
35+
'ALTER TABLE `orders` MODIFY COLUMN `orchestrator_priority` TINYINT UNSIGNED NULL DEFAULT 50'
36+
);
3037
}
3138

3239
public function down(): void
3340
{
34-
// First back-fill any NULLs so the NOT NULL constraint can be restored.
35-
\Illuminate\Support\Facades\DB::table('orders')
41+
// Back-fill any NULLs before restoring the NOT NULL constraint.
42+
DB::table('orders')
3643
->whereNull('orchestrator_priority')
3744
->update(['orchestrator_priority' => 50]);
3845

39-
Schema::table('orders', function (Blueprint $table) {
40-
$table->unsignedTinyInteger('orchestrator_priority')->default(50)->nullable(false)->change();
41-
});
46+
DB::statement(
47+
'ALTER TABLE `orders` MODIFY COLUMN `orchestrator_priority` TINYINT UNSIGNED NOT NULL DEFAULT 50'
48+
);
4249
}
4350
};

0 commit comments

Comments
 (0)