Skip to content

Commit 5b34595

Browse files
committed
Fix duplicate rows
1 parent b0a59a1 commit 5b34595

File tree

1 file changed

+50
-19
lines changed

1 file changed

+50
-19
lines changed

src/Presentation/Markdown.php

Lines changed: 50 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,65 @@ public function getContents()
1515
{
1616
$contents = $this->contents;
1717
$output = [];
18-
foreach ($contents as $table => $properties) {
18+
19+
foreach ($contents as $table => $rows) {
20+
// Normalize & de-duplicate rows for this table
21+
// Supports both list-style rows and associative rows.
22+
$order = ['column', 'type', 'length', 'default', 'nullable', 'comment'];
23+
24+
$unique = [];
25+
foreach ($rows as $row) {
26+
if (is_array($row) && array_is_list($row)) {
27+
// Already positional
28+
$cells = array_map(fn ($v) => trim((string) $v), $row);
29+
} else {
30+
// Map associative row to the expected column order
31+
$cells = [];
32+
foreach ($order as $k) {
33+
$cells[] = isset($row[$k]) ? trim((string) $row[$k]) : '';
34+
}
35+
}
36+
37+
// Key for dedupe (stable & whitespace-normalized)
38+
$key = implode('||', $cells);
39+
if (! isset($unique[$key])) {
40+
$unique[$key] = $cells;
41+
}
42+
}
43+
44+
// Render table
1945
$output[] = '### '.$table.PHP_EOL.PHP_EOL;
2046
$output[] = '| Column | Type | Length | Default | Nullable | Comment |'.PHP_EOL;
2147
$output[] = '|--------|------|--------|---------|----------|---------|'.PHP_EOL;
22-
foreach ($properties as $key => $value) {
23-
$fields = [];
24-
foreach ($value as $k => $v) {
25-
$fields[] = "{$v}";
26-
}
27-
$output[] = '| '.implode(' | ', $fields).' |'.PHP_EOL;
48+
49+
foreach ($unique as $cells) {
50+
// Ensure exactly 6 cells
51+
$cells = array_pad($cells, 6, '');
52+
$output[] = '| '.implode(' | ', $cells).' |'.PHP_EOL;
2853
}
54+
2955
$output[] = PHP_EOL;
3056
}
3157

3258
$schema = implode('', $output);
3359
$stub = $this->getStub();
60+
3461
$database_config = config('database.connections.'.$this->connection);
35-
$host = isset($database_config['host']) ? $database_config['host'] : null;
36-
$port = isset($database_config['port']) ? $database_config['port'] : null;
37-
38-
return str_replace([
39-
'APP_NAME',
40-
'DB_CONNECTION', 'DB_HOST', 'DB_PORT', 'DB_DATABASE',
41-
'SCHEMA_CONTENT',
42-
], [
43-
config('app.name'),
44-
$this->connection, $host, $port, $database_config['database'],
45-
$schema,
46-
], $stub);
62+
$host = $database_config['host'] ?? null;
63+
$port = $database_config['port'] ?? null;
64+
65+
return str_replace(
66+
[
67+
'APP_NAME',
68+
'DB_CONNECTION', 'DB_HOST', 'DB_PORT', 'DB_DATABASE',
69+
'SCHEMA_CONTENT',
70+
],
71+
[
72+
config('app.name'),
73+
$this->connection, $host, $port, $database_config['database'],
74+
$schema,
75+
],
76+
$stub
77+
);
4778
}
4879
}

0 commit comments

Comments
 (0)