예제 #1
0
 /**
  * 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}";
 }
예제 #3
0
파일: Migration.php 프로젝트: sigma-z/dive
 /**
  * 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);
 }
예제 #4
0
 /**
  * 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);
     }
 }