. */ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Schema\Visitor\Visitor; use Doctrine\DBAL\Platforms\AbstractPlatform; class ForeignKeyConstraint extends AbstractAsset implements Constraint { /** * @var Table */ protected $_localTable; /** * @var array */ protected $_localColumnNames; /** * @var string */ protected $_foreignTableName; /** * @var array */ protected $_foreignColumnNames; /** * @var string */ protected $_cascade = ''; /** * @var array */ protected $_options; /** * * @param array $localColumnNames * @param string $foreignTableName * @param array $foreignColumnNames * @param string $cascade * @param string|null $name */ public function __construct(array $localColumnNames, $foreignTableName, array $foreignColumnNames, $name=null, array $options=array()) { $this->_setName($name); $this->_localColumnNames = $localColumnNames; $this->_foreignTableName = $foreignTableName; $this->_foreignColumnNames = $foreignColumnNames; $this->_options = $options; } /** * @return string */ public function getLocalTableName() { return $this->_localTable->getName(); } /** * @param Table $table */ public function setLocalTable(Table $table) { $this->_localTable = $table; } /** * @return array */ public function getLocalColumns() { return $this->_localColumnNames; } public function getColumns() { return $this->_localColumnNames; } /** * @return string */ public function getForeignTableName() { return $this->_foreignTableName; } /** * Get the quoted representation of this asset but only if it was defined with one. Otherwise * return the plain unquoted value as inserted. * * @param AbstractPlatform $platform * @return string */ public function getQuotedForeignTableName(AbstractPlatform $platform) { $keywords = $platform->getReservedKeywordsList(); $parts = explode(".", $this->getForeignTableName()); foreach ($parts AS $k => $v) { $parts[$k] = ($this->_quoted || $keywords->isKeyword($v)) ? $platform->quoteIdentifier($v) : $v; } return implode(".", $parts); } /** * @return array */ public function getForeignColumns() { return $this->_foreignColumnNames; } public function hasOption($name) { return isset($this->_options[$name]); } public function getOption($name) { return $this->_options[$name]; } /** * Gets the options associated with this constraint * * @return array */ public function getOptions() { return $this->_options; } /** * Foreign Key onUpdate status * * @return string|null */ public function onUpdate() { return $this->_onEvent('onUpdate'); } /** * Foreign Key onDelete status * * @return string|null */ public function onDelete() { return $this->_onEvent('onDelete'); } /** * @param string $event * @return string|null */ private function _onEvent($event) { if (isset($this->_options[$event])) { $onEvent = strtoupper($this->_options[$event]); if (!in_array($onEvent, array('NO ACTION', 'RESTRICT'))) { return $onEvent; } } return false; } }