. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\ORM; use Espo\ORM\Entity; use Espo\ORM\Metadata; use Espo\ORM\Repository\RDBRepository; use Espo\ORM\Repository\Repository; use Espo\ORM\Executor\SqlExecutor; use Espo\Core\Container; class EntityManagerProxy { private ?EntityManager $entityManager = null; public function __construct(private Container $container) {} private function getEntityManager(): EntityManager { if (!$this->entityManager) { $this->entityManager = $this->container->getByClass(EntityManager::class); } return $this->entityManager; } public function getNewEntity(string $entityType): Entity { return $this->getEntityManager()->getNewEntity($entityType); } public function getEntityById(string $entityType, string $id): ?Entity { return $this->getEntityManager()->getEntityById($entityType, $id); } /** * @deprecated As of v9.0. * @todo Remove in v11.0. */ public function getEntity(string $entityType, ?string $id = null): ?Entity { /** @noinspection PhpDeprecationInspection */ return $this->getEntityManager()->getEntity($entityType, $id); } /** * @param array $options */ public function saveEntity(Entity $entity, array $options = []): void { $this->getEntityManager()->saveEntity($entity, $options); } /** * @return Repository */ public function getRepository(string $entityType): Repository { return $this->getEntityManager()->getRepository($entityType); } /** * @return RDBRepository */ public function getRDBRepository(string $entityType): RDBRepository { return $this->getEntityManager()->getRDBRepository($entityType); } public function getMetadata(): Metadata { return $this->getEntityManager()->getMetadata(); } public function getSqlExecutor(): SqlExecutor { return $this->getEntityManager()->getSqlExecutor(); } /** * Get an RDB repository by an entity class name. * * @template T of Entity * @param class-string $className An entity class name. * @return RDBRepository */ public function getRDBRepositoryByClass(string $className): RDBRepository { return $this->getEntityManager()->getRDBRepositoryByClass($className); } /** * Get a repository by an entity class name. * * @template T of Entity * @param class-string $className An entity class name. * @return Repository */ public function getRepositoryByClass(string $className): Repository { return $this->getEntityManager()->getRepositoryByClass($className); } }