Skip to content

Commit e91e199

Browse files
committed
Fix this issue
1 parent dcaa0d3 commit e91e199

File tree

4 files changed

+74
-7
lines changed

4 files changed

+74
-7
lines changed

src/lib/AttributeResolver.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
namespace cebe\yii2openapi\lib;
99

10-
use cebe\yii2openapi\lib\Config;
11-
use cebe\yii2openapi\lib\CustomSpecAttr;
1210
use cebe\yii2openapi\lib\exceptions\InvalidDefinitionException;
1311
use cebe\yii2openapi\lib\items\Attribute;
1412
use cebe\yii2openapi\lib\items\AttributeRelation;
@@ -22,7 +20,6 @@
2220
use Yii;
2321
use yii\helpers\Inflector;
2422
use yii\helpers\StringHelper;
25-
use yii\helpers\VarDumper;
2623
use function explode;
2724
use function strpos;
2825
use function strtolower;
@@ -266,7 +263,7 @@ protected function resolveProperty(
266263

267264
$relation = Yii::createObject(
268265
AttributeRelation::class,
269-
[$property->getName(), $relatedTableName, $relatedClassName]
266+
[static::relationName($property->getName(), $property->fkColName), $relatedTableName, $relatedClassName]
270267
)
271268
->asHasOne([$fkProperty->getName() => $attribute->columnName]);
272269
$relation->onUpdateFkConstraint = $property->onUpdateFkConstraint;
@@ -317,7 +314,7 @@ protected function resolveProperty(
317314
$this->relations[$property->getName()] =
318315
Yii::createObject(
319316
AttributeRelation::class,
320-
[$property->getName(), $relatedTableName, $relatedClassName]
317+
[static::relationName($property->getName(), $property->fkColName), $relatedTableName, $relatedClassName]
321318
)
322319
->asHasMany([$fkProperty->getName() => $fkProperty->getName()])->asSelfReference();
323320
return;
@@ -326,7 +323,7 @@ protected function resolveProperty(
326323
$this->relations[$property->getName()] =
327324
Yii::createObject(
328325
AttributeRelation::class,
329-
[$property->getName(), $relatedTableName, $relatedClassName]
326+
[static::relationName($property->getName(), $property->fkColName), $relatedTableName, $relatedClassName]
330327
)
331328
->asHasMany([$foreignPk => $this->schema->getPkName()]);
332329
return;
@@ -345,7 +342,7 @@ protected function resolveProperty(
345342
$this->relations[$property->getName()] =
346343
Yii::createObject(
347344
AttributeRelation::class,
348-
[$property->getName(), $relatedTableName, $relatedClassName]
345+
[static::relationName($property->getName(), $property->fkColName), $relatedTableName, $relatedClassName]
349346
)
350347
->asHasMany([Inflector::camel2id($this->schemaName, '_') . '_id' => $this->schema->getPkName()]);
351348
return;
@@ -492,4 +489,13 @@ protected function resolvePropertyRef(PropertySchema $property, Attribute $attri
492489
$this->attributes[$property->getName()] =
493490
$attribute->setFakerStub($this->guessFakerStub($attribute, $fkProperty));
494491
}
492+
493+
public static function relationName(string $propertyName, ?string $fkColumnName): string
494+
{
495+
$relationName = $propertyName;
496+
if (!str_contains($fkColumnName, '_')) {
497+
$relationName = strtolower($fkColumnName) === strtolower($relationName) ? $relationName . 'Rel' : $relationName;
498+
}
499+
return $relationName;
500+
}
495501
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
return [
4+
'openApiPath' => '@specs/issue_fix/29_extension_fk_column_name_cause_error_in_case_of_column_name_without_underscore/index.yaml',
5+
'generateUrls' => true,
6+
'generateModels' => true,
7+
'excludeModels' => [
8+
'Error',
9+
],
10+
'generateControllers' => true,
11+
'generateMigrations' => true,
12+
'generateModelFaker' => true,
13+
];
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
openapi: "3.0.0"
2+
info:
3+
version: 1.0.0
4+
title: Extension FK COLUMN NAME cause error in case of column name without underscore \#29
5+
paths:
6+
/:
7+
get:
8+
summary: List
9+
operationId: list
10+
responses:
11+
'200':
12+
description: The information
13+
14+
components:
15+
schemas:
16+
User:
17+
type: object
18+
properties:
19+
id:
20+
type: integer
21+
name:
22+
type: string
23+
Post:
24+
type: object
25+
properties:
26+
id:
27+
type: integer
28+
content:
29+
type: string
30+
user:
31+
allOf:
32+
- $ref: '#/components/schemas/User'
33+
- x-fk-column-name: user
34+

tests/unit/IssueFixTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,4 +360,18 @@ public function test158BugGiiapiGeneratedRulesEnumWithTrim()
360360
]);
361361
$this->checkFiles($actualFiles, $expectedFiles);
362362
}
363+
364+
// https://github.com/php-openapi/yii2-openapi/issues/29
365+
public function test29ExtensionFkColumnNameCauseErrorInCaseOfColumnNameWithoutUnderscore()
366+
{
367+
$testFile = Yii::getAlias("@specs/issue_fix/29_extension_fk_column_name_cause_error_in_case_of_column_name_without_underscore/index.php");
368+
$this->runGenerator($testFile);
369+
// $actualFiles = FileHelper::findFiles(Yii::getAlias('@app'), [
370+
// 'recursive' => true,
371+
// ]);
372+
// $expectedFiles = FileHelper::findFiles(Yii::getAlias("@specs/issue_fix/29_extension_fk_column_name_cause_error_in_case_of_column_name_without_underscore/mysql"), [
373+
// 'recursive' => true,
374+
// ]);
375+
// $this->checkFiles($actualFiles, $expectedFiles); // TODO
376+
}
363377
}

0 commit comments

Comments
 (0)