/** * @param RelationshipDefinition $relationship * @param null|int $seed */ public function process1ToNRelationship(RelationshipDefinition $relationship, $seed) { $startNodes = $this->nodesByIdentifier[$relationship->getStartNode()]; $endNodes = $this->nodesByIdentifier[$relationship->getEndNode()]; $target = $this->calculateApproxTargetNodes($startNodes->count(), $endNodes->count()); $maxIteration = 1 === $target ? $startNodes->count() : $startNodes->count() - 1; if ($endNodes->count() > $startNodes->count()) { if ($endNodes->count() % $startNodes->count() === 0) { $maxIteration = $startNodes->count(); } } $ec = $endNodes->count(); $eci = 0; $ssi = 0; for ($s = 0; $s < $maxIteration; $s++) { for ($i = 0; $i < $target; $i++) { $startNode = $startNodes->get($s); $endNode = $endNodes->get($eci); $this->createRelationship($relationship->getType(), $startNode->getId(), $startNode->getLabel(), $endNode->getId(), $endNode->getLabel(), $relationship->getProperties(), $seed); $eci++; } $ssi++; } if ($ssi < $startNodes->count()) { $lastStartNode = $startNodes->get($ssi); for ($eci; $eci < $ec; $eci++) { $endNode = $endNodes->get($eci); $this->createRelationship($relationship->getType(), $lastStartNode->getId(), $lastStartNode->getLabel(), $endNode->getId(), $endNode->getLabel(), $relationship->getProperties(), $seed); } } }