eZ\Publish\Core\Repository\ContentService::addRelation PHP Method

addRelation() public method

The source of the relation is the content and version referenced by $versionInfo.
public addRelation ( eZ\Publish\API\Repository\Values\Content\VersionInfo $sourceVersion, eZ\Publish\API\Repository\Values\Content\ContentInfo $destinationContent ) : eZ\Publish\API\Repository\Values\Content\Relation
$sourceVersion eZ\Publish\API\Repository\Values\Content\VersionInfo
$destinationContent eZ\Publish\API\Repository\Values\Content\ContentInfo the destination of the relation
return eZ\Publish\API\Repository\Values\Content\Relation the newly created relation
    public function addRelation(APIVersionInfo $sourceVersion, ContentInfo $destinationContent)
    {
        $sourceVersion = $this->loadVersionInfoById($sourceVersion->contentInfo->id, $sourceVersion->versionNo);
        if ($sourceVersion->status !== APIVersionInfo::STATUS_DRAFT) {
            throw new BadStateException('$sourceVersion', 'Relations of type common can only be added to versions of status draft');
        }
        if (!$this->repository->canUser('content', 'edit', $sourceVersion)) {
            throw new UnauthorizedException('content', 'edit', array('contentId' => $sourceVersion->contentInfo->id));
        }
        $sourceContentInfo = $sourceVersion->getContentInfo();
        $this->repository->beginTransaction();
        try {
            $spiRelation = $this->persistenceHandler->contentHandler()->addRelation(new SPIRelationCreateStruct(array('sourceContentId' => $sourceContentInfo->id, 'sourceContentVersionNo' => $sourceVersion->versionNo, 'sourceFieldDefinitionId' => null, 'destinationContentId' => $destinationContent->id, 'type' => APIRelation::COMMON)));
            $this->repository->commit();
        } catch (Exception $e) {
            $this->repository->rollback();
            throw $e;
        }
        return $this->domainMapper->buildRelationDomainObject($spiRelation, $sourceContentInfo, $destinationContent);
    }