1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
<?php
declare(strict_types=1);
namespace Doctrine\Performance\Hydration;
use Doctrine\ORM\EntityRepository;
use Doctrine\Performance\EntityManagerFactory;
use Doctrine\Tests\Models\Company\CompanyAuction;
use Doctrine\Tests\Models\Company\CompanyCar;
use Doctrine\Tests\Models\Company\CompanyContract;
use Doctrine\Tests\Models\Company\CompanyEmployee;
use Doctrine\Tests\Models\Company\CompanyEvent;
use Doctrine\Tests\Models\Company\CompanyFixContract;
use Doctrine\Tests\Models\Company\CompanyFlexContract;
use Doctrine\Tests\Models\Company\CompanyFlexUltraContract;
use Doctrine\Tests\Models\Company\CompanyManager;
use Doctrine\Tests\Models\Company\CompanyOrganization;
use Doctrine\Tests\Models\Company\CompanyPerson;
use Doctrine\Tests\Models\Company\CompanyRaffle;
use PhpBench\Benchmark\Metadata\Annotations\BeforeMethods;
/** @BeforeMethods({"init"}) */
final class SingleTableInheritanceHydrationPerformanceBench
{
private EntityRepository|null $contractsRepository = null;
private EntityRepository|null $fixContractsRepository = null;
private EntityRepository|null $flexContractRepository = null;
private EntityRepository|null $ultraContractRepository = null;
public function init(): void
{
$entityManager = EntityManagerFactory::getEntityManager([
CompanyPerson::class,
CompanyEmployee::class,
CompanyManager::class,
CompanyOrganization::class,
CompanyEvent::class,
CompanyAuction::class,
CompanyRaffle::class,
CompanyCar::class,
CompanyContract::class,
]);
$this->contractsRepository = $entityManager->getRepository(CompanyContract::class);
$this->fixContractsRepository = $entityManager->getRepository(CompanyFixContract::class);
$this->flexContractRepository = $entityManager->getRepository(CompanyFlexContract::class);
$this->ultraContractRepository = $entityManager->getRepository(CompanyFlexUltraContract::class);
$person = new CompanyEmployee();
$person->setName('Poor Sales Guy');
$person->setDepartment('Sales');
$person->setSalary(100);
$entityManager->persist($person);
for ($i = 0; $i < 33; $i++) {
$fixContract = new CompanyFixContract();
$flexContract = new CompanyFlexContract();
$ultraContract = new CompanyFlexUltraContract();
$fixContract->setFixPrice(1000);
$fixContract->setSalesPerson($person);
$fixContract->markCompleted();
$flexContract->setSalesPerson($person);
$flexContract->setHoursWorked(100);
$flexContract->setPricePerHour(100);
$flexContract->markCompleted();
$ultraContract->setSalesPerson($person);
$ultraContract->setHoursWorked(150);
$ultraContract->setPricePerHour(150);
$ultraContract->setMaxPrice(7000);
$entityManager->persist($fixContract);
$entityManager->persist($flexContract);
$entityManager->persist($ultraContract);
}
$entityManager->flush();
$entityManager->clear();
}
public function benchHydrateFixContracts(): void
{
$this->fixContractsRepository->findAll();
}
public function benchHydrateFlexContracts(): void
{
$this->flexContractRepository->findAll();
}
public function benchHydrateUltraContracts(): void
{
$this->ultraContractRepository->findAll();
}
public function benchHydrateAllContracts(): void
{
$this->contractsRepository->findAll();
}
}
|