db icon indicating copy to clipboard operation
db copied to clipboard

Table foreign keys load two times as arrays and as objects

Open Tigrov opened this issue 2 years ago • 5 comments

Current implementation loads table foreign keys two times as arrays and as objects.

PostgreSQL https://github.com/yiisoft/db-pgsql/tree/535975396d865da6cb15ed7bee5648c27a9b7360/src/Schema.php#L499 as arrays https://github.com/yiisoft/db-pgsql/tree/535975396d865da6cb15ed7bee5648c27a9b7360/src/Schema.php#L894 as objects

MySQL https://github.com/yiisoft/db-mysql/blob/4dd4e13502a0f047627c398854fc733a41054370/src/Schema.php#L265 as arrays https://github.com/yiisoft/db-mysql/blob/4dd4e13502a0f047627c398854fc733a41054370/src/Schema.php#L618 as objects

SQLite https://github.com/yiisoft/db-sqlite/blob/b172ec9c11f31a5618a80e8cc6e3b298f423eb26/src/Schema.php#L381 as arrays https://github.com/yiisoft/db-sqlite/blob/b172ec9c11f31a5618a80e8cc6e3b298f423eb26/src/Schema.php#L201 as objects

Should they be loaded once?

Q A
Version 1.1.0
PHP version any
Operating system any

Tigrov avatar Aug 02 '23 14:08 Tigrov

Perhaps the solution could be use AbstractSchema::getTableMetadata() into Schema::findConstraints() of each DB specific package?

vjik avatar Aug 06 '23 07:08 vjik

Yes, it looks like this. And use ForeignKeyConstraint[] instead of associative arrays.

Tigrov avatar Aug 06 '23 11:08 Tigrov

@darkdef @terabytesoftw What do you think?

vjik avatar Aug 06 '23 11:08 vjik

Perhaps the solution could be use AbstractSchema::getTableMetadata() into Schema::findConstraints() of each DB specific package?

Or AbstractSchema::getTableForeignKeys()

Tigrov avatar Aug 06 '23 12:08 Tigrov

Suggestion to use one way to get foreign keys Schema::getTableForeignKeys() and do not store them in TableSchemaInterface as for indexes

Tigrov avatar Aug 15 '23 07:08 Tigrov

Fixed

Tigrov avatar Aug 04 '25 16:08 Tigrov