public function testForeignKeyIsForeignPrimaryKey() { $database = $this->getDatabaseMock('bookstore'); $platform = $this->getPlatformMock(); $foreignTable = $this->getTableMock('authors'); $localTable = $this->getTableMock('books', ['platform' => $platform, 'database' => $database]); $idColumn = $this->getColumnMock('id'); $authorIdColumn = $this->getColumnMock('author_id'); $database->expects($this->any())->method('getTable')->with($this->equalTo('authors'))->will($this->returnValue($foreignTable)); $foreignTable->expects($this->once())->method('getPrimaryKey')->will($this->returnValue([$idColumn])); $foreignTable->expects($this->any())->method('getColumn')->with($this->equalTo('id'))->will($this->returnValue($idColumn)); $localTable->expects($this->any())->method('getColumn')->with($this->equalTo('author_id'))->will($this->returnValue($authorIdColumn)); $fk = new ForeignKey(); $fk->setTable($localTable); $fk->setForeignTableCommonName('authors'); $fk->addReference('author_id', 'id'); $fkMapping = $fk->getColumnObjectsMapping(); $this->assertTrue($fk->isForeignPrimaryKey()); $this->assertCount(1, $fk->getForeignColumnObjects()); $this->assertSame($authorIdColumn, $fkMapping[0]['local']); $this->assertSame($idColumn, $fkMapping[0]['foreign']); $this->assertSame($idColumn, $fk->getForeignColumn(0)); }
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 getForeignKeyDDL(ForeignKey $fk) { if ($fk->isSkipSql() || $fk->isPolymorphic()) { return; } $pattern = "CONSTRAINT %s\n 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->hasOnDelete()) { $script .= "\n ON DELETE " . $fk->getOnDelete(); } return $script; }
public function getForeignKeyDDL(ForeignKey $fk) { if ($fk->isSkipSql() || !$this->foreignKeySupport) { return; } $pattern = "FOREIGN KEY (%s) REFERENCES %s (%s)"; $script = sprintf($pattern, $this->getColumnListDDL($fk->getLocalColumnObjects()), $this->quoteIdentifier($fk->getForeignTableName()), $this->getColumnListDDL($fk->getForeignColumnObjects())); if ($fk->hasOnUpdate()) { $script .= "\n ON UPDATE " . $fk->getOnUpdate(); } if ($fk->hasOnDelete()) { $script .= "\n ON DELETE " . $fk->getOnDelete(); } return $script; }