/** * @TODO Remove result collections, use repository records instead * Loads reference for a given record * * @param Record $record * @param string $relationName */ private function loadReferenceFor(Record $record, $relationName) { $recordCollection = $record->getResultCollection(); if (!$recordCollection) { $recordCollection = new RecordCollection($record->getTable()); $recordCollection->add($record); } if ($record->exists()) { $identifiers = $recordCollection->getIdentifiers(); $query = $this->getReferenceQuery($record, $relationName, $identifiers); /** @var \Dive\Record[]|\Dive\Collection\RecordCollection $relatedCollection */ $relatedCollection = $query->execute(RecordManager::FETCH_RECORD_COLLECTION); } else { $table = $record->getTable(); $rm = $table->getRecordManager(); $relatedTable = $this->getJoinTable($rm, $relationName); $relatedCollection = new RecordCollection($relatedTable); } // updates reference map between both collections $isOwningSide = $this->isOwningSide($relationName); $ownerCollection = $isOwningSide ? $relatedCollection : $recordCollection; $referencedCollection = $isOwningSide ? $recordCollection : $relatedCollection; $this->map->updateOwnerCollectionWithReferencedCollection($ownerCollection, $referencedCollection); }