From 42e0b9ed1762e3323b96e429f9a62552806398cd Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 13 Mar 2025 16:52:13 +0530 Subject: [PATCH 1/3] Failing test --- .../index.php | 13 +++++ .../index.yml | 42 ++++++++++++++++ .../mysql/models/Address.php | 8 +++ .../mysql/models/Bar.php | 8 +++ .../mysql/models/Foo.php | 8 +++ .../mysql/models/base/Address.php | 50 +++++++++++++++++++ .../mysql/models/base/Bar.php | 45 +++++++++++++++++ .../mysql/models/base/Foo.php | 36 +++++++++++++ tests/unit/issues/Issue100Test.php | 24 +++++++++ 9 files changed, 234 insertions(+) create mode 100644 tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.php create mode 100644 tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.yml create mode 100644 tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Address.php create mode 100644 tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Bar.php create mode 100644 tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Foo.php create mode 100644 tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Address.php create mode 100644 tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Bar.php create mode 100644 tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Foo.php create mode 100644 tests/unit/issues/Issue100Test.php diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.php b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.php new file mode 100644 index 00000000..b3b791d8 --- /dev/null +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.php @@ -0,0 +1,13 @@ + '@specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.yml', + 'generateUrls' => false, + 'generateModels' => true, + 'excludeModels' => [ + 'Error', + ], + 'generateControllers' => false, + 'generateMigrations' => false, + 'generateModelFaker' => false, +]; diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.yml b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.yml new file mode 100644 index 00000000..f6609c57 --- /dev/null +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.yml @@ -0,0 +1,42 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: 100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation +paths: + /: + get: + summary: List + operationId: list + responses: + '200': + description: The information + +components: + schemas: + Address: + type: object + properties: + id: + type: integer + shortName: + type: string + postCode: + type: string + maxLength: 64 + Foo: + type: object + properties: + id: + type: integer + address: + $ref: '#/components/schemas/Address' + + Bar: + type: object + properties: + id: + type: integer + task: + $ref: '#/components/schemas/Address' + related_task: + $ref: '#/components/schemas/Address' diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Address.php b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Address.php new file mode 100644 index 00000000..7165505e --- /dev/null +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Address.php @@ -0,0 +1,8 @@ + [['shortName', 'postCode'], 'trim'], + 'shortName_string' => [['shortName'], 'string'], + 'postCode_string' => [['postCode'], 'string', 'max' => 64], + ]; + } + + # belongs to relation + public function getFoo() + { + return $this->hasOne(\app\models\Foo::class, ['address_id' => 'id']); + } + + # belongs to relation + public function getBar() + { + return $this->hasOne(\app\models\Bar::class, ['task_id' => 'id']); + } + + # belongs to relation + public function getBar2() + { + return $this->hasOne(\app\models\Bar::class, ['related_task_id' => 'id']); + } +} diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Bar.php b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Bar.php new file mode 100644 index 00000000..46ed9945 --- /dev/null +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Bar.php @@ -0,0 +1,45 @@ + [['task_id'], 'integer'], + 'task_id_exist' => [['task_id'], 'exist', 'targetRelation' => 'task'], + 'related_task_id_integer' => [['related_task_id'], 'integer'], + 'related_task_id_exist' => [['related_task_id'], 'exist', 'targetRelation' => 'relatedTask'], + ]; + } + + public function getTask() + { + return $this->hasOne(\app\models\Address::class, ['id' => 'task_id']); + } + + public function getRelatedTask() + { + return $this->hasOne(\app\models\Address::class, ['id' => 'related_task_id']); + } +} diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Foo.php b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Foo.php new file mode 100644 index 00000000..1ae50310 --- /dev/null +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Foo.php @@ -0,0 +1,36 @@ + [['address_id'], 'integer'], + 'address_id_exist' => [['address_id'], 'exist', 'targetRelation' => 'address'], + ]; + } + + public function getAddress() + { + return $this->hasOne(\app\models\Address::class, ['id' => 'address_id']); + } +} diff --git a/tests/unit/issues/Issue100Test.php b/tests/unit/issues/Issue100Test.php new file mode 100644 index 00000000..3f7abe73 --- /dev/null +++ b/tests/unit/issues/Issue100Test.php @@ -0,0 +1,24 @@ +runGenerator($testFile); + $actualFiles = FileHelper::findFiles(Yii::getAlias('@app'), [ + 'recursive' => true, + ]); + $expectedFiles = FileHelper::findFiles(Yii::getAlias("@specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql"), [ + 'recursive' => true, + ]); + $this->checkFiles($actualFiles, $expectedFiles); + } +} From 6bcae105b61cd9438333074f9a61444c3ca2f087 Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 13 Mar 2025 16:56:17 +0530 Subject: [PATCH 2/3] Implement fix --- src/generator/default/dbmodel.php | 10 ++++++---- .../mysql/models/Address.php | 2 ++ .../mysql/models/Bar.php | 2 ++ .../mysql/models/Foo.php | 2 ++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/generator/default/dbmodel.php b/src/generator/default/dbmodel.php index 15c9f722..cd196bbd 100644 --- a/src/generator/default/dbmodel.php +++ b/src/generator/default/dbmodel.php @@ -146,14 +146,16 @@ public function getgetCamelName() ?>() } -belongsToRelations as $relationName => $relation): ?>getCamelName(), $usedRelationNames) ? $i : '' ?> +belongsToRelations as $relationName => $relation): ?>getCamelName(), $usedRelationNames) ? array_count_values($usedRelationNames)[$relation->getCamelName()]+1 : 1 ?> # belongs to relation - public function getgetCamelName() . ($number) ?>() + public function getgetCamelName() . ($i === 1 ? '' : $i) ?>() { return $this->getMethod() ?>(\\getClassName() ?>::class, linkToString() ?>); } -getCamelName(); endforeach; ?> +getCamelName(); endforeach; ?> } diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Address.php b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Address.php index 7165505e..abfd7d59 100644 --- a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Address.php +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Address.php @@ -4,5 +4,7 @@ class Address extends \app\models\base\Address { + + } diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Bar.php b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Bar.php index e01f2dde..77c185bc 100644 --- a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Bar.php +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Bar.php @@ -4,5 +4,7 @@ class Bar extends \app\models\base\Bar { + + } diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Foo.php b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Foo.php index eedc32ea..bfbe456f 100644 --- a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Foo.php +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/Foo.php @@ -4,5 +4,7 @@ class Foo extends \app\models\base\Foo { + + } From 40d607937d837692d778433bbf26a7b761fc0f8c Mon Sep 17 00:00:00 2001 From: Sohel Ahmed Mesaniya Date: Thu, 13 Mar 2025 16:58:28 +0530 Subject: [PATCH 3/3] Refactor test --- .../index.yml | 4 ++-- .../mysql/models/base/Address.php | 4 ++-- .../mysql/models/base/Bar.php | 24 +++++++++---------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.yml b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.yml index f6609c57..67312df9 100644 --- a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.yml +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/index.yml @@ -36,7 +36,7 @@ components: properties: id: type: integer - task: + address: $ref: '#/components/schemas/Address' - related_task: + related_address: $ref: '#/components/schemas/Address' diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Address.php b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Address.php index 402ac3da..7dfca04b 100644 --- a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Address.php +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Address.php @@ -39,12 +39,12 @@ public function getFoo() # belongs to relation public function getBar() { - return $this->hasOne(\app\models\Bar::class, ['task_id' => 'id']); + return $this->hasOne(\app\models\Bar::class, ['address_id' => 'id']); } # belongs to relation public function getBar2() { - return $this->hasOne(\app\models\Bar::class, ['related_task_id' => 'id']); + return $this->hasOne(\app\models\Bar::class, ['related_address_id' => 'id']); } } diff --git a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Bar.php b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Bar.php index 46ed9945..74e15ac3 100644 --- a/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Bar.php +++ b/tests/specs/issue_fix/100_fix_numbering_issue_in_relation_names_in_case_of_more_than_one_similar_belongs_to_relation/mysql/models/base/Bar.php @@ -10,11 +10,11 @@ * This is the model class for table "bars". * * @property int $id - * @property int $task_id - * @property int $related_task_id + * @property int $address_id + * @property int $related_address_id * - * @property \app\models\Address $task - * @property \app\models\Address $relatedTask + * @property \app\models\Address $address + * @property \app\models\Address $relatedAddress */ abstract class Bar extends \yii\db\ActiveRecord { @@ -26,20 +26,20 @@ public static function tableName() public function rules() { return [ - 'task_id_integer' => [['task_id'], 'integer'], - 'task_id_exist' => [['task_id'], 'exist', 'targetRelation' => 'task'], - 'related_task_id_integer' => [['related_task_id'], 'integer'], - 'related_task_id_exist' => [['related_task_id'], 'exist', 'targetRelation' => 'relatedTask'], + 'address_id_integer' => [['address_id'], 'integer'], + 'address_id_exist' => [['address_id'], 'exist', 'targetRelation' => 'address'], + 'related_address_id_integer' => [['related_address_id'], 'integer'], + 'related_address_id_exist' => [['related_address_id'], 'exist', 'targetRelation' => 'relatedAddress'], ]; } - public function getTask() + public function getAddress() { - return $this->hasOne(\app\models\Address::class, ['id' => 'task_id']); + return $this->hasOne(\app\models\Address::class, ['id' => 'address_id']); } - public function getRelatedTask() + public function getRelatedAddress() { - return $this->hasOne(\app\models\Address::class, ['id' => 'related_task_id']); + return $this->hasOne(\app\models\Address::class, ['id' => 'related_address_id']); } }