From 051ebfe5841f2cbcd0e614d5b4b3eb89d32f16b2 Mon Sep 17 00:00:00 2001 From: janvt Date: Wed, 29 Mar 2023 13:38:53 +0200 Subject: [PATCH 1/2] make identity optional when generating repository --- src/Maker/MakeModel.php | 40 +++++++++---------- .../skeleton/model/Repository.tpl.php | 2 + .../model/RepositoryInterface.tpl.php | 2 + 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/Maker/MakeModel.php b/src/Maker/MakeModel.php index a26d8e3..85cecdb 100644 --- a/src/Maker/MakeModel.php +++ b/src/Maker/MakeModel.php @@ -470,17 +470,17 @@ private function generateEntity( /** * Generate model repository * - * @param ClassNameDetails $modelClassNameDetails - * @param ClassNameDetails $identityClassNameDetails - * @param InputInterface $input * @param Generator $generator + * @param InputInterface $input + * @param ClassNameDetails $modelClassNameDetails + * @param ?ClassNameDetails $identityClassNameDetails * @throws \Exception */ private function generateRepository( - ClassNameDetails $modelClassNameDetails, - ClassNameDetails $identityClassNameDetails, + Generator $generator, InputInterface $input, - Generator $generator + ClassNameDetails $modelClassNameDetails, + ?ClassNameDetails $identityClassNameDetails, ): void { $interfaceNameDetails = $generator->createClassNameDetails( $input->getArgument('name'), @@ -489,10 +489,10 @@ private function generateRepository( ); $this->generateRepositoryInterface( + $generator, $interfaceNameDetails, $modelClassNameDetails, $identityClassNameDetails, - $generator ); $implementationNameDetails = $generator->createClassNameDetails( @@ -503,17 +503,17 @@ private function generateRepository( $interfaceClassName = $interfaceNameDetails->getShortName() . 'Interface'; $templateVars = [ - 'use_statements' => new UseStatementGenerator([ + 'use_statements' => new UseStatementGenerator(array_filter([ $modelClassNameDetails->getFullName(), - $identityClassNameDetails->getFullName(), + $identityClassNameDetails?->getFullName(), ManagerRegistry::class, QueryBuilder::class, [ OrmRepository::class => 'OrmRepository' ], [ $interfaceNameDetails->getFullName() => $interfaceClassName ], - ]), + ])), 'interface_class_name' => $interfaceClassName, 'model_class_name' => $modelClassNameDetails->getShortName(), - 'identity_class_name' => $identityClassNameDetails->getShortName() + 'identity_class_name' => $identityClassNameDetails?->getShortName() ]; $templatePath = __DIR__.'/../Resources/skeleton/model/Repository.tpl.php'; @@ -529,26 +529,26 @@ private function generateRepository( /** * Generate model repository * - * @param ClassNameDetails $classNameDetails - * @param ClassNameDetails $entityClassNameDetails - * @param ClassNameDetails $identityClassNameDetails * @param Generator $generator + * @param ClassNameDetails $classNameDetails + * @param ClassNameDetails $modelClassNameDetails + * @param ?ClassNameDetails $identityClassNameDetails * @throws \Exception */ private function generateRepositoryInterface( + Generator $generator, ClassNameDetails $classNameDetails, ClassNameDetails $modelClassNameDetails, - ClassNameDetails $identityClassNameDetails, - Generator $generator + ?ClassNameDetails $identityClassNameDetails, ): void { $templateVars = [ - 'use_statements' => new UseStatementGenerator([ + 'use_statements' => new UseStatementGenerator(array_filter([ $modelClassNameDetails->getFullName(), - $identityClassNameDetails->getFullName(), + $identityClassNameDetails?->getFullName(), Repository::class, - ]), + ])), 'model_class_name' => $modelClassNameDetails->getShortName(), - 'identity_class_name' => $identityClassNameDetails->getShortName() + 'identity_class_name' => $identityClassNameDetails?->getShortName() ]; $templatePath = __DIR__.'/../Resources/skeleton/model/RepositoryInterface.tpl.php'; diff --git a/src/Resources/skeleton/model/Repository.tpl.php b/src/Resources/skeleton/model/Repository.tpl.php index 56b2ddd..7881a87 100644 --- a/src/Resources/skeleton/model/Repository.tpl.php +++ b/src/Resources/skeleton/model/Repository.tpl.php @@ -6,12 +6,14 @@ class extends OrmRepository implements { + public function findById( $id): ? { // TODO: Implement me! return null; } + // public function findByExampleField($value): self // { diff --git a/src/Resources/skeleton/model/RepositoryInterface.tpl.php b/src/Resources/skeleton/model/RepositoryInterface.tpl.php index 7acbb9f..3493615 100644 --- a/src/Resources/skeleton/model/RepositoryInterface.tpl.php +++ b/src/Resources/skeleton/model/RepositoryInterface.tpl.php @@ -6,5 +6,7 @@ interface extends Repository { + public function findById( $id): ?; + } From 94cdabc0d1c580e45ab39974b340f91d44c5319b Mon Sep 17 00:00:00 2001 From: janvt Date: Wed, 29 Mar 2023 13:53:51 +0200 Subject: [PATCH 2/2] handle optional entity for mapping --- src/Maker/MakeModel.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Maker/MakeModel.php b/src/Maker/MakeModel.php index 85cecdb..2b88fd3 100644 --- a/src/Maker/MakeModel.php +++ b/src/Maker/MakeModel.php @@ -221,7 +221,7 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen $identityClassNameDetails = $this->generateIdentity($modelName, $input, $io, $generator); $this->generateEntityMappings($modelClassNameDetails, $input, $io, $generator); $this->generateEntity($modelClassNameDetails, $input, $generator); - $this->generateRepository($modelClassNameDetails, $identityClassNameDetails, $input, $generator); + $this->generateRepository($generator, $input, $modelClassNameDetails, $identityClassNameDetails); $this->writeSuccessMessage($io); } @@ -423,9 +423,9 @@ private function generateEntityMappings( [ 'model_class' => $modelClassNameDetails->getFullName(), 'has_identity' => $hasIdentity, - 'type_name' => $this->templateVariables['type_name'], + 'type_name' => $hasIdentity ?? $this->templateVariables['type_name'], 'table_name' => $tableName, - 'identity_column_name' => $this->templateVariables['identity_type'], + 'identity_column_name' => $hasIdentity ?? $this->templateVariables['identity_type'], ], ); } catch (YamlManipulationFailedException $e) { @@ -474,7 +474,6 @@ private function generateEntity( * @param InputInterface $input * @param ClassNameDetails $modelClassNameDetails * @param ?ClassNameDetails $identityClassNameDetails - * @throws \Exception */ private function generateRepository( Generator $generator,