public function __construct($Name, Map $ReferencedColumnMap, $UpdateMode = ForeignKeyMode::NoAction, $DeleteMode = ForeignKeyMode::NoAction)
{
$this->Name = $Name;
$this->ReferencedColumnMap = $ReferencedColumnMap;
foreach ($ReferencedColumnMap as $ParentColumn) {
$ReferencedColumn = $ReferencedColumnMap[$ParentColumn];
if ($this->ParentTable === null && $this->ReferencedTable === null) {
$this->ParentTable = $ParentColumn->GetTable();
$this->ReferencedTable = $ReferencedColumn->GetTable();
} else {
if (!$this->ParentTable->Is($ParentColumn->GetTable())) {
throw new Relational\InvalidColumnException('The supplied parent columns must belong to the same table: %s and %s given', $this->ParentTable->GetName(), $ParentColumn->GetTable()->GetName());
}
if (!$this->ReferencedTable->Is($ReferencedColumn->GetTable())) {
throw new Relational\InvalidColumnException('The supplied referenced columns must belong to the same table: %s and %s given', $this->ReferencedTable->GetName(), $ReferencedColumn->GetTable()->GetName());
}
}
$ParentIdentifier = $ParentColumn->GetIdentifier();
$ReferencedIdentifier = $ReferencedColumn->GetIdentifier();
$this->ParentColumnIdentifierMap[$ParentIdentifier] = $ParentColumn;
$this->ReferencedColumnIdentifierMap[$ReferencedIdentifier] = $ReferencedColumn;
$this->ParentReferencedColumnNameMap[$ParentColumn->GetName()] = $ReferencedColumn->GetName();
$this->ParentReferencedColumnIdentifierMap[$ParentIdentifier] = $ReferencedIdentifier;
$this->ReferencedParentColumnIdentifierMap[$ReferencedIdentifier] = $ParentIdentifier;
}
$this->UpdateMode = $UpdateMode;
$this->DeleteMode = $DeleteMode;
}