. * * 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\ORM\Relation; use Espo\ORM\Entity; use Espo\ORM\EntityCollection; use LogicException; use RuntimeException as RuntimeExceptionAlias; class EmptyRelations implements Relations { /** @var array */ private array $setData = []; public function __construct() {} public function resetAll(): void { $this->setData = []; } public function reset(string $relation): void { unset($this->setData[$relation]); } /** * @param Entity|null $related */ public function set(string $relation, Entity|null $related): void { $this->setData[$relation] = $related; } public function isSet(string $relation): bool { return array_key_exists($relation, $this->setData); } /** * @return Entity|null */ public function getSet(string $relation): Entity|null { if (!array_key_exists($relation, $this->setData)) { throw new RuntimeExceptionAlias("Relation '$relation' is not set."); } return $this->setData[$relation]; } public function getOne(string $relation): ?Entity { $entity = $this->setData[$relation] ?? null; if ($entity instanceof EntityCollection) { throw new LogicException("Not an entity."); } return $entity; } /*** * @return EntityCollection */ public function getMany(string $relation): EntityCollection { $collection = $this->setData[$relation] ?? new EntityCollection(); if (!$collection instanceof EntityCollection) { throw new LogicException("Not a collection."); } /** @var EntityCollection */ return $collection; } }