dbal: The changes from #3392 break indexes with a fixed length
BC Break Report
Q | A |
---|---|
BC Break | yes |
Version | 2.9.1 |
Summary
The changes from #3392 break indexes with a fixed length.
Previous behaviour
$table = new Table('test');
$table->addColumn('path', 'text');
$table->addIndex(['path' => 'path(768)'], 'path', [], ['lengths' => [768]]);
This added the following index:

Current behavior
Doctrine\DBAL\Schema\SchemaException:
There is no column with name 'path(768)' on table 'test'.
The exception seems to occur due to the removal of the following lines in the Table::_createIndex()
method:
if (is_numeric($columnName) && is_string($indexColOptions)) {
$columnName = $indexColOptions;
}
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Reactions: 7
- Comments: 15 (14 by maintainers)
No, it does not, because it does not set the correct column name. The column name needs to be
path(768)
to match the return value of$schemaManager->createSchema()
.Create schema from database
Create schema manually
And because of this difference,
Schema::getMigrateToSql()
no longer handles the index correctly.Another possible solution
Maybe
$table->addIndex(['path'], 'path', [], ['lengths' => [768]]);
should just add the index length to the column name? Then the manual schema would match the created schema again.@leofeyer thank you for the test. I’ll figure out first what exactly is broken and then we’ll see where the test belongs.