Skip to content

Commit

Permalink
dev: Add a findOneOrBuildBy method
Browse files Browse the repository at this point in the history
  • Loading branch information
marien-probesys committed Mar 12, 2024
1 parent 1c4ef4b commit 812ceb1
Showing 1 changed file with 21 additions and 6 deletions.
27 changes: 21 additions & 6 deletions src/Repository/FindOrCreateTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@ trait FindOrCreateTrait
{
/**
* @param array<string,mixed> $criteria
* @param array<string,mixed> $valuesToCreate
* @param array<string,mixed> $valuesToBuild
*/
public function findOneOrCreateBy(array $criteria, array $valuesToCreate = [], bool $flush = false): object
public function findOneOrBuildBy(array $criteria, array $valuesToBuild = []): object
{
$entity = $this->findOneBy($criteria);
if ($entity) {
return $entity;
}

$values = array_merge($criteria, $valuesToCreate);
$values = array_merge($criteria, $valuesToBuild);

$entityClassName = $this->getClassName();
$entity = new $entityClassName();
Expand All @@ -32,10 +32,25 @@ public function findOneOrCreateBy(array $criteria, array $valuesToCreate = [], b
$entity->$setterMethod($value);
}

$this->getEntityManager()->persist($entity);
return $entity;
}

/**
* @param array<string,mixed> $criteria
* @param array<string,mixed> $valuesToCreate
*/
public function findOneOrCreateBy(array $criteria, array $valuesToCreate = [], bool $flush = false): object
{
$entity = $this->findOneOrBuildBy($criteria, $valuesToCreate);

$entityManager = $this->getEntityManager();

if (!$entityManager->contains($entity)) {
$entityManager->persist($entity);

if ($flush) {
$this->getEntityManager()->flush();
if ($flush) {
$this->getEntityManager()->flush();
}
}

return $entity;
Expand Down

0 comments on commit 812ceb1

Please sign in to comment.