From 36573ecbf0e822984eb01f5541eac77c84d5440e Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Fri, 10 Oct 2025 18:41:33 +0200 Subject: [PATCH] fix: use correct property declaration for withinTransaction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The parent Migration class defines $withinTransaction without a type hint. Setting it without redeclaring (no "bool" type) avoids the PHP 8.4 error: "Type of Migration::$withinTransaction must not be defined" This is the proper Laravel way to disable transactions for migrations that need to run CREATE INDEX CONCURRENTLY in PostgreSQL. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ...6_131350_optimize_activity_log_indexes.php | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/database/migrations/2025_06_26_131350_optimize_activity_log_indexes.php b/database/migrations/2025_06_26_131350_optimize_activity_log_indexes.php index 23073bd37..4d4be1232 100644 --- a/database/migrations/2025_06_26_131350_optimize_activity_log_indexes.php +++ b/database/migrations/2025_06_26_131350_optimize_activity_log_indexes.php @@ -6,28 +6,26 @@ return new class extends Migration { + /** + * Disable transactions for this migration because CREATE INDEX CONCURRENTLY + * cannot run inside a transaction block in PostgreSQL. + */ + public $withinTransaction = false; + /** * Run the migrations. */ public function up(): void { try { - // CREATE INDEX CONCURRENTLY cannot run inside a transaction block - // We need to commit any open transaction first - DB::commit(); - // Add specific index for type_uuid queries with ordering DB::unprepared('CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_activity_type_uuid_created_at ON activity_log ((properties->>\'type_uuid\'), created_at DESC)'); // Add specific index for status queries on properties DB::unprepared('CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_activity_properties_status ON activity_log ((properties->>\'status\'))'); - // Begin a new transaction for subsequent migrations - DB::beginTransaction(); } catch (\Exception $e) { Log::error('Error adding optimized indexes to activity_log: '.$e->getMessage()); - // Ensure we have a transaction for subsequent migrations - DB::beginTransaction(); } } @@ -37,16 +35,10 @@ public function up(): void public function down(): void { try { - // DROP INDEX CONCURRENTLY cannot run inside a transaction block - DB::commit(); - DB::unprepared('DROP INDEX CONCURRENTLY IF EXISTS idx_activity_type_uuid_created_at'); DB::unprepared('DROP INDEX CONCURRENTLY IF EXISTS idx_activity_properties_status'); - - DB::beginTransaction(); } catch (\Exception $e) { Log::error('Error dropping optimized indexes from activity_log: '.$e->getMessage()); - DB::beginTransaction(); } } };