/** * Get relation referenced repository * * @param Record $record * @param string $relationName * @return \Dive\Table\Repository */ protected function getRefRepository(Record $record, $relationName) { $rm = $record->getTable()->getRecordManager(); $tableName = $this->relation->isReferencedSide($relationName) ? $this->relation->getReferencedTable() : $this->relation->getOwningTable(); $refTable = $rm->getTable($tableName); return $refTable->getRepository(); }
/** * Returns the description of the failure * * The beginning of failure messages is "Failed asserting that" in most * cases. This method should return the second part of that sentence. * * @param Relation $relation Evaluated value or object. * @return string */ protected function failureDescription($relation) { $owningAlias = $relation->getOwningAlias(); $owningTable = $relation->getOwningTable(); $referencedAlias = $relation->getReferencedAlias(); $referencedTable = $relation->getReferencedTable(); return $this->toString() . "{$owningTable}->{$referencedAlias}: {$referencedTable} | {$referencedTable}->{$owningAlias}: {$owningTable}"; }
/** * adds foreign key by relation instance * * @param \Dive\Relation\Relation $relation * @return Migration * @throws MigrationException */ public function addForeignKeyByRelation(Relation $relation) { if ($relation->getOwningTable() !== $this->tableName) { throw new MigrationException("\n Relation does not belong to table {$this->tableName}, it belongs to " . $relation->getOwningTable() . '!'); } $owningField = $relation->getOwningField(); $referencedTable = $relation->getReferencedTable(); $referencedField = $relation->getReferencedField(); $onDelete = $relation->getOnDelete(); $onUpdate = $relation->getOnUpdate(); return $this->addForeignKey($owningField, $referencedTable, $referencedField, $onDelete, $onUpdate); }
/** * Saves records related for referenced relation * * @param Relation $relation * @param array|string $relatedRows * @param string $id */ private function saveRecordsOnOwningRelation(Relation $relation, $relatedRows, $id) { $owningTable = $relation->getOwningTable(); $owningField = $relation->getOwningField(); if ($relation->isOneToMany()) { foreach ($relatedRows as $relatedKey => $relatedRow) { $this->saveRecordOnOwningRelation($relatedRow, $owningTable, $owningField, $id, $relatedKey); } } else { $this->saveRecordOnOwningRelation($relatedRows, $owningTable, $owningField, $id); } }