Skip to content

Commit 3d7cb69

Browse files
committed
Refactor PivotProcessor: Replace composite primary key with auto-increment ID and preserve uniqueness via unique index
- Replaces composite primary keys (e.g. role_id + customer_id) with a single 'id' column (bigInteger, auto-increment) - Converts the removed primary key columns into a unique index to retain logical constraints - Ensures compatibility with Laravel's Eloquent model usage on pivot tables
1 parent 4355eb2 commit 3d7cb69

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

src/Service/Generator/Compiler/Mapper/IndexMapper.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,13 @@ protected function generateIndex(IndexEntity $index): string
4747
$method .= "'" . $columns[0] . "'";
4848
}
4949

50-
$method .= ", '" . $index->getName() . "')";
50+
$name = trim($index->getName());
51+
if ($name !== '') {
52+
$method .= ", '" . $name . "'";
53+
}
54+
55+
$method .= ')';
56+
5157
$methods = [$method];
5258

5359
return $this->chainMethodsToString($methods);

src/Service/Generator/MigrationGenerator.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ public function generateMigrationForTable(
130130

131131
$normalizationManager = $this->getNormalizationManager();
132132
if ($normalizationManager) {
133-
//dd($schemaResult);
134133
$schemaResult = $normalizationManager->normalize($schemaResult);
135134
}
136135

src/Service/Generator/Normalization/Processors/PivotProcessor.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace N3XT0R\MigrationGenerator\Service\Generator\Normalization\Processors;
44

55
use N3XT0R\MigrationGenerator\Service\Generator\Definition\Entity\FieldEntity;
6+
use N3XT0R\MigrationGenerator\Service\Generator\Definition\Entity\IndexEntity;
67
use N3XT0R\MigrationGenerator\Service\Generator\Definition\Entity\PrimaryKeyEntity;
78
use N3XT0R\MigrationGenerator\Service\Generator\Definition\Entity\ResultEntity;
89
use N3XT0R\MigrationGenerator\Service\Generator\Normalization\Context\NormalizationContext;
@@ -22,7 +23,8 @@ public function process(NormalizationContext $context): ResultEntity
2223

2324
foreach ($results as $tableName => $definitions) {
2425
$primary = current($definitions['primaryKey']);
25-
if ($primary instanceof PrimaryKeyEntity && count($primary->getColumns()) >= 2) {
26+
$pkColumns = $primary->getColumns();
27+
if ($primary instanceof PrimaryKeyEntity && count($pkColumns) >= 2) {
2628
$idField = new FieldEntity();
2729
$idField->setTable($tableName);
2830
$idField->setType('bigInteger');
@@ -33,9 +35,15 @@ public function process(NormalizationContext $context): ResultEntity
3335
'nullable' => false
3436
]);
3537

38+
$uniqueIndex = new IndexEntity();
39+
$uniqueIndex->setType('unique');
40+
$uniqueIndex->setColumns($pkColumns);
41+
3642
$idField->setColumnName('id');
3743
$results[$tableName]['table'] = ['id' => $idField, ...$definitions['table']];
44+
$results[$tableName]['index'] = [$uniqueIndex, ...$definitions['index']];
3845
unset($results[$tableName]['primaryKey']);
46+
//dump($results);
3947
}
4048
}
4149

0 commit comments

Comments
 (0)