Ejemplo n.º 1
0
 /**
  * @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);
 }