diff --git a/src/Doctrine/EntityClassGenerator.php b/src/Doctrine/EntityClassGenerator.php index a54790b77..0abecb6b8 100644 --- a/src/Doctrine/EntityClassGenerator.php +++ b/src/Doctrine/EntityClassGenerator.php @@ -40,7 +40,7 @@ public function __construct( ) { } - public function generateEntityClass(ClassNameDetails $entityClassDetails, bool $apiResource, bool $withPasswordUpgrade = false, bool $generateRepositoryClass = true, bool $broadcast = false, EntityIdTypeEnum $useUuidIdentifier = EntityIdTypeEnum::INT): string + public function generateEntityClass(ClassNameDetails $entityClassDetails, bool $apiResource, bool $withPasswordUpgrade = false, bool $generateRepositoryClass = true, bool $broadcast = false, EntityIdTypeEnum $useUuidIdentifier = EntityIdTypeEnum::INT, array $params = []): string { $repoClassDetails = $this->generator->createClassNameDetails( $entityClassDetails->getRelativeName(), @@ -48,7 +48,7 @@ public function generateEntityClass(ClassNameDetails $entityClassDetails, bool $ 'Repository' ); - $tableName = $this->doctrineHelper->getPotentialTableName($entityClassDetails->getFullName()); + $potentialTableName = $this->doctrineHelper->getPotentialTableName($entityClassDetails->getFullName()); $useStatements = new UseStatementGenerator([ $repoClassDetails->getFullName(), @@ -85,8 +85,9 @@ public function generateEntityClass(ClassNameDetails $entityClassDetails, bool $ 'repository_class_name' => $repoClassDetails->getShortName(), 'api_resource' => $apiResource, 'broadcast' => $broadcast, - 'should_escape_table_name' => $this->doctrineHelper->isKeyword($tableName), - 'table_name' => $tableName, + 'is_keyword' => $this->doctrineHelper->isKeyword($params['tableName']), + 'table_name' => $params['tableName'], + 'should_render_table_annotation' => $params['tableName'] != $potentialTableName, 'id_type' => $useUuidIdentifier, ] ); diff --git a/src/Maker/MakeEntity.php b/src/Maker/MakeEntity.php index e0498f36b..5faccf610 100644 --- a/src/Maker/MakeEntity.php +++ b/src/Maker/MakeEntity.php @@ -97,6 +97,7 @@ public function configureCommand(Command $command, InputConfiguration $inputConf ->addOption('broadcast', 'b', InputOption::VALUE_NONE, 'Add the ability to broadcast entity updates using Symfony UX Turbo?') ->addOption('regenerate', null, InputOption::VALUE_NONE, 'Instead of adding new fields, simply generate the methods (e.g. getter/setter) for existing fields') ->addOption('overwrite', null, InputOption::VALUE_NONE, 'Overwrite any existing getter/setter methods') + ->addOption('table', null, InputOption::VALUE_OPTIONAL, 'Allow specify the table name') ->setHelp($this->getHelpFileContents('MakeEntity.txt')) ; @@ -186,14 +187,29 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen 'Entity\\' ); + if (!$input->getOption('table')) { + $potentialTableName = $this->doctrineHelper->getPotentialTableName($input->getArgument('name')); + + $tableName = $io->ask( + \sprintf('Enter the database table name (e.g. `%s`)', $potentialTableName), + $potentialTableName + ); + $input->setOption('table', $tableName); + } + $classExists = class_exists($entityClassDetails->getFullName()); if (!$classExists) { + $tableName = $input->getOption('table'); + $broadcast = $input->getOption('broadcast'); $entityPath = $this->entityClassGenerator->generateEntityClass( entityClassDetails: $entityClassDetails, apiResource: $input->getOption('api-resource'), broadcast: $broadcast, useUuidIdentifier: $this->getIdType(), + params: [ + 'tableName' => $tableName, + ] ); if ($broadcast) { diff --git a/templates/doctrine/Entity.tpl.php b/templates/doctrine/Entity.tpl.php index 00d08aa90..4193a3fd3 100644 --- a/templates/doctrine/Entity.tpl.php +++ b/templates/doctrine/Entity.tpl.php @@ -10,8 +10,9 @@ #[ORM\Entity(repositoryClass: ::class)] -#[ORM\Table(name: '``')] - + +#[ORM\Table(name: '')] + #[ApiResource]