public function getForeignKeyDDL(ForeignKey $fk) { if ($fk->isSkipSql() || !$this->foreignKeySupport) { return; } $pattern = "FOREIGN KEY (%s) REFERENCES %s (%s)"; $script = sprintf($pattern, $this->getColumnListDDL($fk->getLocalColumns()), $this->quoteIdentifier($fk->getForeignTableName()), $this->getColumnListDDL($fk->getForeignColumns())); if ($fk->hasOnUpdate()) { $script .= "\n ON UPDATE " . $fk->getOnUpdate(); } if ($fk->hasOnDelete()) { $script .= "\n ON DELETE " . $fk->getOnDelete(); } return $script; }
public function getForeignKeyDDL(ForeignKey $fk) { if ($fk->isSkipSql() || $fk->isPolymorphic()) { return; } $pattern = 'CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s)'; $script = sprintf($pattern, $this->quoteIdentifier($fk->getName()), $this->getColumnListDDL($fk->getLocalColumnObjects()), $this->quoteIdentifier($fk->getForeignTableName()), $this->getColumnListDDL($fk->getForeignColumnObjects())); if ($fk->hasOnUpdate() && $fk->getOnUpdate() != ForeignKey::SETNULL) { $script .= ' ON UPDATE ' . $fk->getOnUpdate(); } if ($fk->hasOnDelete() && $fk->getOnDelete() != ForeignKey::SETNULL) { $script .= ' ON DELETE ' . $fk->getOnDelete(); } return $script; }
public function testGetOnActionBehaviors() { $fk = new ForeignKey(); $fk->setOnUpdate('SETNULL'); $fk->setOnDelete('CASCADE'); $this->assertSame('SET NULL', $fk->getOnUpdate()); $this->assertTrue($fk->hasOnUpdate()); $this->assertSame('CASCADE', $fk->getOnDelete()); $this->assertTrue($fk->hasOnDelete()); }