From 0d386a7331e9cb5213c371b16e19e2e2c891c7e0 Mon Sep 17 00:00:00 2001 From: farida Date: Fri, 17 Apr 2026 01:44:13 +0700 Subject: [PATCH 1/3] fix: use `getForeignKeys` for better accuracy in listing foreign keys --- .../migrations/2021_01_29_121118_rename_segments_to_tags.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/database/migrations/2021_01_29_121118_rename_segments_to_tags.php b/database/migrations/2021_01_29_121118_rename_segments_to_tags.php index b72a94c0..c7201eb1 100644 --- a/database/migrations/2021_01_29_121118_rename_segments_to_tags.php +++ b/database/migrations/2021_01_29_121118_rename_segments_to_tags.php @@ -51,9 +51,8 @@ public function up() protected function listTableForeignKeys(string $table): array { - return collect(Schema::getColumnListing($table)) - ->filter(fn ($column) => Schema::getColumnType($table, $column) === 'foreign') - ->map(fn ($column) => "{$column}_foreign") + return collect(Schema::getForeignKeys($table)) + ->map(fn ($fk) => $fk['name']) ->toArray(); } } From b050373d9d200b8153f3b3eb8a02a9796ec83caf Mon Sep 17 00:00:00 2001 From: farida Date: Fri, 17 Apr 2026 01:51:48 +0700 Subject: [PATCH 2/3] refactor: update migration to rename indexes and adjust foreign keys --- ...1_01_29_121118_rename_segments_to_tags.php | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/database/migrations/2021_01_29_121118_rename_segments_to_tags.php b/database/migrations/2021_01_29_121118_rename_segments_to_tags.php index c7201eb1..6979a93e 100644 --- a/database/migrations/2021_01_29_121118_rename_segments_to_tags.php +++ b/database/migrations/2021_01_29_121118_rename_segments_to_tags.php @@ -15,35 +15,43 @@ public function up() { Schema::rename('sendportal_segments', 'sendportal_tags'); + Schema::table('sendportal_tags', function (Blueprint $table) { + $table->renameIndex('sendportal_segments_workspace_id_index', 'sendportal_tags_workspace_id_index'); + }); + Schema::table('sendportal_segment_subscriber', function (Blueprint $table) { $foreignKeys = $this->listTableForeignKeys('sendportal_segment_subscriber'); - if (in_array('sendportal_segment_subscriber_segment_id_foreign', $foreignKeys)) { + if (in_array('sendportal_segment_subscriber_segment_id_foreign', $foreignKeys, true)) { $table->dropForeign('sendportal_segment_subscriber_segment_id_foreign'); - } elseif (in_array('segment_subscriber_segment_id_foreign', $foreignKeys)) { + } elseif (in_array('segment_subscriber_segment_id_foreign', $foreignKeys, true)) { $table->dropForeign('segment_subscriber_segment_id_foreign'); } $table->renameColumn('segment_id', 'tag_id'); - $table->foreign('tag_id')->references('id')->on('sendportal_tags'); + $table->renameIndex('sendportal_segment_subscriber_subscriber_id_index', 'sendportal_tag_subscriber_subscriber_id_index'); + + $table->foreign('tag_id', 'sendportal_tag_subscriber_tag_id_index') + ->references('id')->on('sendportal_tags'); }); Schema::rename("sendportal_segment_subscriber", "sendportal_tag_subscriber"); - Schema::table('sendportal_campaign_segment', function (Blueprint $table) { $foreignKeys = $this->listTableForeignKeys('sendportal_campaign_segment'); - if (in_array('sendportal_campaign_segment_segment_id_foreign', $foreignKeys)) { + if (in_array('sendportal_campaign_segment_segment_id_foreign', $foreignKeys, true)) { $table->dropForeign('sendportal_campaign_segment_segment_id_foreign'); - } elseif (in_array('campaign_segment_segment_id_foreign', $foreignKeys)) { + } elseif (in_array('campaign_segment_segment_id_foreign', $foreignKeys, true)) { $table->dropForeign('campaign_segment_segment_id_foreign'); } $table->renameColumn('segment_id', 'tag_id'); - $table->foreign('tag_id')->references('id')->on('sendportal_tags'); + $table->renameIndex('sendportal_campaign_segment_campaign_id_index', 'sendportal_campaign_tag_campaign_id_index'); + + $table->foreign('tag_id', 'sendportal_campaign_tag_tag_id_index')->references('id')->on('sendportal_tags'); }); Schema::rename("sendportal_campaign_segment", "sendportal_campaign_tag"); From 440034aaadbbdeb774ddebebb95a23c264ece10c Mon Sep 17 00:00:00 2001 From: farida Date: Fri, 17 Apr 2026 02:10:49 +0700 Subject: [PATCH 3/3] refactor: enhance migration to drop and reassign foreign keys during table renaming --- ...1_01_29_121118_rename_segments_to_tags.php | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/database/migrations/2021_01_29_121118_rename_segments_to_tags.php b/database/migrations/2021_01_29_121118_rename_segments_to_tags.php index 6979a93e..1c2b816d 100644 --- a/database/migrations/2021_01_29_121118_rename_segments_to_tags.php +++ b/database/migrations/2021_01_29_121118_rename_segments_to_tags.php @@ -28,12 +28,16 @@ public function up() $table->dropForeign('segment_subscriber_segment_id_foreign'); } - $table->renameColumn('segment_id', 'tag_id'); + if (in_array('sendportal_segment_subscriber_subscriber_id_foreign', $foreignKeys, true)) { + $table->dropForeign('sendportal_segment_subscriber_subscriber_id_foreign'); + } - $table->renameIndex('sendportal_segment_subscriber_subscriber_id_index', 'sendportal_tag_subscriber_subscriber_id_index'); + $table->renameColumn('segment_id', 'tag_id'); $table->foreign('tag_id', 'sendportal_tag_subscriber_tag_id_index') ->references('id')->on('sendportal_tags'); + $table->foreign('subscriber_id', 'sendportal_tag_subscriber_subscriber_id_foreign') + ->references('id')->on('sendportal_subscribers'); }); Schema::rename("sendportal_segment_subscriber", "sendportal_tag_subscriber"); @@ -47,11 +51,16 @@ public function up() $table->dropForeign('campaign_segment_segment_id_foreign'); } - $table->renameColumn('segment_id', 'tag_id'); + if (in_array('sendportal_campaign_segment_campaign_id_foreign', $foreignKeys, true)) { + $table->dropForeign('sendportal_campaign_segment_campaign_id_foreign'); + } - $table->renameIndex('sendportal_campaign_segment_campaign_id_index', 'sendportal_campaign_tag_campaign_id_index'); + $table->renameColumn('segment_id', 'tag_id'); - $table->foreign('tag_id', 'sendportal_campaign_tag_tag_id_index')->references('id')->on('sendportal_tags'); + $table->foreign('tag_id', 'sendportal_campaign_tag_tag_id_index') + ->references('id')->on('sendportal_tags'); + $table->foreign('campaign_id', 'sendportal_campaign_tag_campaign_id_foreign') + ->references('id')->on('sendportal_campaigns'); }); Schema::rename("sendportal_campaign_segment", "sendportal_campaign_tag");