diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 22240aae624..6a43b371e13 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -11,6 +11,7 @@ Yii Framework 2 Change Log - Enh #18762: Added `yii\helpers\Json::$keepObjectType` and `yii\web\JsonResponseFormatter::$keepObjectType` in order to avoid changing zero-indexed objects to array in `yii\helpers\Json::encode()` (zebraf1) - Enh #18783: Add support for URI namespaced tags in `XmlResponseFormatter` (WinterSilence, samdark) - Enh #18783: Add `XmlResponseFormatter::$objectTagToLowercase` option to lowercase object tags (WinterSilence, samdark) +- Bug #18845: Fix duplicating `id` in `MigrateController::addDefaultPrimaryKey()` (WinterSilence, samdark) - Bug #17119: Fix `yii\caching\Cache::multiSet()` to use `yii\caching\Cache::$defaultDuration` when no duration is passed (OscarBarrett) diff --git a/framework/console/controllers/MigrateController.php b/framework/console/controllers/MigrateController.php index 3f0efeaac12..1ae91c7fd86 100644 --- a/framework/console/controllers/MigrateController.php +++ b/framework/console/controllers/MigrateController.php @@ -606,7 +606,7 @@ protected function splitFieldIntoChunks($field) protected function addDefaultPrimaryKey(&$fields) { foreach ($fields as $field) { - if (false !== strripos($field['decorators'], 'primarykey()')) { + if ($field['property'] === 'id' || false !== strripos($field['decorators'], 'primarykey()')) { return; } } diff --git a/tests/data/console/migrate_create/create_id_field_not_as_pk.php b/tests/data/console/migrate_create/create_id_field_not_as_pk.php new file mode 100644 index 00000000000..0cefcb33679 --- /dev/null +++ b/tests/data/console/migrate_create/create_id_field_not_as_pk.php @@ -0,0 +1,37 @@ +createTable('{{%{table}}}', [ + 'id' => \$this->integer(11)->notNull(), + ]); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + \$this->dropTable('{{%{table}}}'); + } +} + +CODE; diff --git a/tests/framework/console/controllers/MigrateControllerTest.php b/tests/framework/console/controllers/MigrateControllerTest.php index e93e2a28061..31e235adaea 100644 --- a/tests/framework/console/controllers/MigrateControllerTest.php +++ b/tests/framework/console/controllers/MigrateControllerTest.php @@ -133,6 +133,9 @@ public function generateMigrationDataProvider() price:money(11,2):notNull, parenthesis_in_comment:string(255):notNull:comment(\'Name of set (RU)\')', ], + 'create_id_field_not_as_pk' => [ + 'fields' => 'id:integer(11):notNull', + ], 'create_fields_with_col_method_after_default_value' => [ 'fields' => 'id:primaryKey, title:string(10):notNull:unique:defaultValue("test"):after("id"), @@ -229,6 +232,7 @@ public function generateMigrationDataProvider() ['create_fields', 'create_test_table', 'test', $params['create_fields']], ['create_fields', 'create_TEST_table', 'TEST', $params['create_fields']], + ['create_id_field_not_as_pk', 'create_test_table', 'test', $params['create_id_field_not_as_pk']], ['create_title_pk', 'create_test_table', 'test', $params['create_title_pk']], ['create_title_pk', 'create_TEST_table', 'TEST', $params['create_title_pk']], ['create_unsigned_pk', 'create_test_table', 'test', $params['create_unsigned_pk']],