From 7d39437e4e1ab9ba741a2db23dcec10e419ea5f5 Mon Sep 17 00:00:00 2001 From: TinaH Date: Thu, 28 Jan 2021 12:26:13 +0100 Subject: [PATCH 1/3] Add Morphs and uuidMorphs php annotation fixes #422 Don't know if you prefer a switch statement or elseif --- src/Generators/ModelGenerator.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Generators/ModelGenerator.php b/src/Generators/ModelGenerator.php index 12beb688..364728c2 100644 --- a/src/Generators/ModelGenerator.php +++ b/src/Generators/ModelGenerator.php @@ -91,8 +91,20 @@ protected function buildClassPhpDoc(Model $model) $phpDoc .= PHP_EOL; /** @var Column $column */ foreach ($model->columns() as $column) { - $phpDoc .= sprintf(' * @property %s $%s', $this->phpDataType($column->dataType()), $column->name()); - $phpDoc .= PHP_EOL; + if ($column->dataType() === 'morphs') { + $phpDoc .= ' * @property int $'. $column->name() . '_id'; + $phpDoc .= PHP_EOL; + $phpDoc .= ' * @property string $'. $column->name() . '_type'; + $phpDoc .= PHP_EOL; + } elseif ($column->dataType() === 'uuidMorphs') { + $phpDoc .= ' * @property string $'. $column->name() . '_id'; + $phpDoc .= PHP_EOL; + $phpDoc .= ' * @property string $'. $column->name() . '_type'; + $phpDoc .= PHP_EOL; + } else { + $phpDoc .= sprintf(' * @property %s $%s', $this->phpDataType($column->dataType()), $column->name()); + $phpDoc .= PHP_EOL; + } } if ($model->usesSoftDeletes()) { From 2b32f854b2c89b2d9164665d600fa95d1ba3f110 Mon Sep 17 00:00:00 2001 From: Nathan Esayeas Date: Tue, 2 Feb 2021 00:25:01 -0500 Subject: [PATCH 2/3] Add nullableMorphs and nullableUuidMorphs php annotation --- src/Generators/ModelGenerator.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Generators/ModelGenerator.php b/src/Generators/ModelGenerator.php index 364728c2..01925e33 100644 --- a/src/Generators/ModelGenerator.php +++ b/src/Generators/ModelGenerator.php @@ -96,11 +96,21 @@ protected function buildClassPhpDoc(Model $model) $phpDoc .= PHP_EOL; $phpDoc .= ' * @property string $'. $column->name() . '_type'; $phpDoc .= PHP_EOL; + } elseif ($column->dataType() === 'nullableMorphs') { + $phpDoc .= ' * @property int|null $'. $column->name() . '_id'; + $phpDoc .= PHP_EOL; + $phpDoc .= ' * @property string|null $'. $column->name() . '_type'; + $phpDoc .= PHP_EOL; } elseif ($column->dataType() === 'uuidMorphs') { $phpDoc .= ' * @property string $'. $column->name() . '_id'; $phpDoc .= PHP_EOL; $phpDoc .= ' * @property string $'. $column->name() . '_type'; $phpDoc .= PHP_EOL; + } elseif ($column->dataType() === 'nullableUuidMorphs') { + $phpDoc .= ' * @property string|null $'. $column->name() . '_id'; + $phpDoc .= PHP_EOL; + $phpDoc .= ' * @property string|null $'. $column->name() . '_type'; + $phpDoc .= PHP_EOL; } else { $phpDoc .= sprintf(' * @property %s $%s', $this->phpDataType($column->dataType()), $column->name()); $phpDoc .= PHP_EOL; From b304de69e38d5344c126fa464cd995a0c813ad4a Mon Sep 17 00:00:00 2001 From: Nathan Esayeas Date: Tue, 2 Feb 2021 00:25:46 -0500 Subject: [PATCH 3/3] Add fixtures and tests --- .../Feature/Generators/ModelGeneratorTest.php | 1 + tests/fixtures/drafts/optimize.yaml | 9 ++- tests/fixtures/migrations/optimize.php | 8 ++- tests/fixtures/models/optimize.php | 62 +++++++++++++++++++ 4 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 tests/fixtures/models/optimize.php diff --git a/tests/Feature/Generators/ModelGeneratorTest.php b/tests/Feature/Generators/ModelGeneratorTest.php index 6c64a12f..04107bda 100644 --- a/tests/Feature/Generators/ModelGeneratorTest.php +++ b/tests/Feature/Generators/ModelGeneratorTest.php @@ -676,6 +676,7 @@ public function docBlockModelsDataProvider() ['drafts/relationships.yaml', 'app/Comment.php', 'models/relationships-phpdoc.php'], ['drafts/disable-auto-columns.yaml', 'app/State.php', 'models/disable-auto-columns-phpdoc.php'], ['drafts/foreign-key-shorthand.yaml', 'app/Comment.php', 'models/foreign-key-shorthand-phpdoc.php'], + ['drafts/optimize.yaml', 'app/Optimize.php', 'models/optimize.php'], ]; } diff --git a/tests/fixtures/drafts/optimize.yaml b/tests/fixtures/drafts/optimize.yaml index 9c83cb09..3bd6e05e 100644 --- a/tests/fixtures/drafts/optimize.yaml +++ b/tests/fixtures/drafts/optimize.yaml @@ -6,6 +6,9 @@ models: int: integer unsigned dec: decimal:8,2 unsigned big: bigInteger unsigned - foo: morphs nullable - foobar: uuidMorphs nullable - timestamps: false + foo: morphs + bar: uuidMorphs nullable + baz: nullableMorphs + foobar: uuidMorphs + foobarbaz: nullableUuidMorphs + timestamps: true \ No newline at end of file diff --git a/tests/fixtures/migrations/optimize.php b/tests/fixtures/migrations/optimize.php index 43864c55..80f1c98f 100644 --- a/tests/fixtures/migrations/optimize.php +++ b/tests/fixtures/migrations/optimize.php @@ -21,8 +21,12 @@ public function up() $table->unsignedInteger('int'); $table->unsignedDecimal('dec', 8, 2); $table->unsignedBigInteger('big'); - $table->nullableMorphs('foo'); - $table->nullableUuidMorphs('foobar'); + $table->morphs('foo'); + $table->nullableUuidMorphs('bar'); + $table->nullableMorphs('baz'); + $table->uuidMorphs('foobar'); + $table->nullableUuidMorphs('foobarbaz'); + $table->timestamps(); }); } diff --git a/tests/fixtures/models/optimize.php b/tests/fixtures/models/optimize.php new file mode 100644 index 00000000..a7844d83 --- /dev/null +++ b/tests/fixtures/models/optimize.php @@ -0,0 +1,62 @@ + 'integer', + 'tiny' => 'integer', + 'small' => 'integer', + 'medium' => 'integer', + 'dec' => 'decimal:2', + 'big' => 'integer', + ]; +}