Skip to content

Commit

Permalink
Generate simple findBy and findOneBy
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasbeaujean committed Apr 3, 2024
1 parent c606953 commit 6dbb8aa
Show file tree
Hide file tree
Showing 6 changed files with 234 additions and 3 deletions.
7 changes: 6 additions & 1 deletion src/Generator/RepositoryGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,11 @@ private function generateRepository(array $allMetadata, string $bundleName, Clas

//parse the columns
foreach ($fieldMappings as $fieldMapping) {
$renderedTemplate .= $this->templateService->renderField($fieldMapping, $entityDql);
$renderedTemplate .= $this->templateService->renderField(
$fieldMapping,
$entityDql,
$entityClasspath,
);
}

foreach ($associationMappings as $associationMapping) {
Expand All @@ -95,6 +99,7 @@ private function generateRepository(array $allMetadata, string $bundleName, Clas
$entityDql,
$targetEntityMetadata,
$this->configurator->getEntityDqlName($associationMapping['targetEntity']),
$entityClasspath,
);
}

Expand Down
10 changes: 8 additions & 2 deletions src/Generator/TemplateService.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public function renderAssociation(
string $entityDql,
ClassMetadata $targetEntityMetadata,
string $entityDqlTargeted,
string $entityClasspath,
): string {
$idType = null;

Expand All @@ -53,18 +54,23 @@ public function renderAssociation(
'idType' => $idType,
'targetEntity' => $associationMapping['targetEntity'],
'entityDqlTargeted' => $entityDqlTargeted,
'entityClasspath' => $entityClasspath,
);

return $this->twig->render($this->associationTemplate, $parameters);
}

public function renderField($fieldMapping, $entityDql): string
{
public function renderField(
$fieldMapping,
$entityDql,
string $entityClasspath,
): string {
$fieldName = $fieldMapping['fieldName'];
$parameters = array(
'entityDql' => $entityDql,
'column' => ucfirst($fieldName),
'columnDql' => $fieldName,
'entityClasspath' => $entityClasspath,
);

return $this->twig->render($this->columnTemplate, $parameters);
Expand Down
22 changes: 22 additions & 0 deletions src/Resources/views/Generator/AssociationTemplate.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -100,3 +100,25 @@

return $qb;
}

public function findBy{{ column }}(mixed $value): array
{
$qb = $this->getNewQueryBuilder();
static::filterBy{{ column }}($qb, $value);

return static::getQueryBuilderResult($qb);
}

public function findOneBy{{ column }}(
mixed $value,
bool $allowNull = false,
): ?\{{ entityClasspath }} {
$qb = $this->getNewQueryBuilder();
static::filterBy{{ column }}($qb, $value);

if ($allowNull) {
return static::getQueryBuilderOneOrNullResult($qb);
}

return static::getQueryBuilderSingleResult($qb);
}
22 changes: 22 additions & 0 deletions src/Resources/views/Generator/ColumnTemplate.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,25 @@

return $qb;
}

public function findBy{{ column }}(mixed $value): array
{
$qb = $this->getNewQueryBuilder();
static::filterBy{{ column }}($qb, $value);

return static::getQueryBuilderResult($qb);
}

public function findOneBy{{ column }}(
mixed $value,
bool $allowNull = false,
): ?\{{ entityClasspath }} {
$qb = $this->getNewQueryBuilder();
static::filterBy{{ column }}($qb, $value);

if ($allowNull) {
return static::getQueryBuilderOneOrNullResult($qb);
}

return static::getQueryBuilderSingleResult($qb);
}
88 changes: 88 additions & 0 deletions tests/Repository/MyClassRepositoryBase.php
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,28 @@ public static function filterNotInId(QueryBuilder $qb, $value, $entityName = 'my
return $qb;
}

public function findById(mixed $value): array
{
$qb = $this->getNewQueryBuilder();
static::filterById($qb, $value);

return static::getQueryBuilderResult($qb);
}

public function findOneById(
mixed $value,
bool $allowNull = false,
): ?\Tbn\QueryBuilderRepositoryGeneratorBundle\Tests\Entity\MyClass {
$qb = $this->getNewQueryBuilder();
static::filterById($qb, $value);

if ($allowNull) {
return static::getQueryBuilderOneOrNullResult($qb);
}

return static::getQueryBuilderSingleResult($qb);
}

public static function filterByNumber(QueryBuilder $qb, $value, $operator = Comparison::EQ, $entityName = 'myClass', $columnName = 'number'): QueryBuilder
{
if ($value === null) {
Expand Down Expand Up @@ -273,6 +295,28 @@ public static function filterNotInNumber(QueryBuilder $qb, $value, $entityName =
return $qb;
}

public function findByNumber(mixed $value): array
{
$qb = $this->getNewQueryBuilder();
static::filterByNumber($qb, $value);

return static::getQueryBuilderResult($qb);
}

public function findOneByNumber(
mixed $value,
bool $allowNull = false,
): ?\Tbn\QueryBuilderRepositoryGeneratorBundle\Tests\Entity\MyClass {
$qb = $this->getNewQueryBuilder();
static::filterByNumber($qb, $value);

if ($allowNull) {
return static::getQueryBuilderOneOrNullResult($qb);
}

return static::getQueryBuilderSingleResult($qb);
}

public static function filterByName(QueryBuilder $qb, $value, $operator = Comparison::EQ, $entityName = 'myClass', $columnName = 'name'): QueryBuilder
{
if ($value === null) {
Expand Down Expand Up @@ -324,6 +368,28 @@ public static function filterNotInName(QueryBuilder $qb, $value, $entityName = '
return $qb;
}

public function findByName(mixed $value): array
{
$qb = $this->getNewQueryBuilder();
static::filterByName($qb, $value);

return static::getQueryBuilderResult($qb);
}

public function findOneByName(
mixed $value,
bool $allowNull = false,
): ?\Tbn\QueryBuilderRepositoryGeneratorBundle\Tests\Entity\MyClass {
$qb = $this->getNewQueryBuilder();
static::filterByName($qb, $value);

if ($allowNull) {
return static::getQueryBuilderOneOrNullResult($qb);
}

return static::getQueryBuilderSingleResult($qb);
}

public static function filterByForeignClasses(QueryBuilder $qb, $value, $operator = Comparison::EQ, $entityName = 'myClass', $columnName = 'foreignClasses'): QueryBuilder
{
//get a uniq index
Expand Down Expand Up @@ -420,4 +486,26 @@ public static function joinForeignClasses(QueryBuilder $qb, $entityName = 'myCla

return $qb;
}

public function findByForeignClasses(mixed $value): array
{
$qb = $this->getNewQueryBuilder();
static::filterByForeignClasses($qb, $value);

return static::getQueryBuilderResult($qb);
}

public function findOneByForeignClasses(
mixed $value,
bool $allowNull = false,
): ?\Tbn\QueryBuilderRepositoryGeneratorBundle\Tests\Entity\MyClass {
$qb = $this->getNewQueryBuilder();
static::filterByForeignClasses($qb, $value);

if ($allowNull) {
return static::getQueryBuilderOneOrNullResult($qb);
}

return static::getQueryBuilderSingleResult($qb);
}
}
88 changes: 88 additions & 0 deletions tests/Service/ExpectedMyClassRepositoryBase.txt
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,28 @@ class MyClassRepositoryBase extends \Doctrine\Bundle\DoctrineBundle\Repository\S
return $qb;
}

public function findById(mixed $value): array
{
$qb = $this->getNewQueryBuilder();
static::filterById($qb, $value);

return static::getQueryBuilderResult($qb);
}

public function findOneById(
mixed $value,
bool $allowNull = false,
): ?\Tbn\QueryBuilderRepositoryGeneratorBundle\Tests\Entity\MyClass {
$qb = $this->getNewQueryBuilder();
static::filterById($qb, $value);

if ($allowNull) {
return static::getQueryBuilderOneOrNullResult($qb);
}

return static::getQueryBuilderSingleResult($qb);
}

public static function filterByNumber(QueryBuilder $qb, $value, $operator = Comparison::EQ, $entityName = 'myClass', $columnName = 'number'): QueryBuilder
{
if ($value === null) {
Expand Down Expand Up @@ -273,6 +295,28 @@ class MyClassRepositoryBase extends \Doctrine\Bundle\DoctrineBundle\Repository\S
return $qb;
}

public function findByNumber(mixed $value): array
{
$qb = $this->getNewQueryBuilder();
static::filterByNumber($qb, $value);

return static::getQueryBuilderResult($qb);
}

public function findOneByNumber(
mixed $value,
bool $allowNull = false,
): ?\Tbn\QueryBuilderRepositoryGeneratorBundle\Tests\Entity\MyClass {
$qb = $this->getNewQueryBuilder();
static::filterByNumber($qb, $value);

if ($allowNull) {
return static::getQueryBuilderOneOrNullResult($qb);
}

return static::getQueryBuilderSingleResult($qb);
}

public static function filterByName(QueryBuilder $qb, $value, $operator = Comparison::EQ, $entityName = 'myClass', $columnName = 'name'): QueryBuilder
{
if ($value === null) {
Expand Down Expand Up @@ -324,6 +368,28 @@ class MyClassRepositoryBase extends \Doctrine\Bundle\DoctrineBundle\Repository\S
return $qb;
}

public function findByName(mixed $value): array
{
$qb = $this->getNewQueryBuilder();
static::filterByName($qb, $value);

return static::getQueryBuilderResult($qb);
}

public function findOneByName(
mixed $value,
bool $allowNull = false,
): ?\Tbn\QueryBuilderRepositoryGeneratorBundle\Tests\Entity\MyClass {
$qb = $this->getNewQueryBuilder();
static::filterByName($qb, $value);

if ($allowNull) {
return static::getQueryBuilderOneOrNullResult($qb);
}

return static::getQueryBuilderSingleResult($qb);
}

public static function filterByForeignClasses(QueryBuilder $qb, $value, $operator = Comparison::EQ, $entityName = 'myClass', $columnName = 'foreignClasses'): QueryBuilder
{
//get a uniq index
Expand Down Expand Up @@ -420,4 +486,26 @@ class MyClassRepositoryBase extends \Doctrine\Bundle\DoctrineBundle\Repository\S

return $qb;
}

public function findByForeignClasses(mixed $value): array
{
$qb = $this->getNewQueryBuilder();
static::filterByForeignClasses($qb, $value);

return static::getQueryBuilderResult($qb);
}

public function findOneByForeignClasses(
mixed $value,
bool $allowNull = false,
): ?\Tbn\QueryBuilderRepositoryGeneratorBundle\Tests\Entity\MyClass {
$qb = $this->getNewQueryBuilder();
static::filterByForeignClasses($qb, $value);

if ($allowNull) {
return static::getQueryBuilderOneOrNullResult($qb);
}

return static::getQueryBuilderSingleResult($qb);
}
}

0 comments on commit 6dbb8aa

Please sign in to comment.