/** * {@inheritdoc} */ public function addForeignKeyConstraint($foreignTable, array $localColumnNames, array $foreignColumnNames, array $options = [], $constraintName = null) { if (!$constraintName) { $constraintName = $this->nameGenerator->generateForeignKeyConstraintName($this->getName(), $localColumnNames); } return parent::addForeignKeyConstraint($foreignTable, $localColumnNames, $foreignColumnNames, $options, $constraintName); }
/** * Create a foreign key constraint without check of table and columns existence. * This method can be helpful when you need to create a constraint for renamed table or column * * @param Schema $schema * @param QueryBag $queries * @param string $tableName * @param string $foreignTable * @param string[] $localColumnNames * @param string[] $foreignColumnNames * @param array $options * @param string|null $constraintName */ public function addForeignKeyConstraint(Schema $schema, QueryBag $queries, $tableName, $foreignTable, array $localColumnNames, array $foreignColumnNames, array $options = [], $constraintName = null) { if (!$constraintName) { $constraintName = $this->nameGenerator->generateForeignKeyConstraintName($tableName, $localColumnNames); } $constraint = new ForeignKeyConstraint($localColumnNames, $foreignTable, $foreignColumnNames, $constraintName, $options); $diff = new TableDiff($tableName); $diff->addedForeignKeys = [$constraintName => $constraint]; $renameQuery = new SqlMigrationQuery($this->platform->getAlterTableSQL($diff)); $queries->addQuery($renameQuery); }
public function testEncodedForeignKeyConstraintNameIsTheSameAsDoctrineDefault() { $tableName1 = 'tbl123456789012345'; $columnName1 = 'clmn1234567890'; $tableName2 = 'tbl1234567890'; $columnName2 = 'clmn12345'; $table1 = new Table($tableName1, [new Column($columnName1, Type::getType('integer'))]); $table2 = new Table($tableName2, [new Column($columnName2, Type::getType('integer'))]); $table2->setPrimaryKey([$columnName2]); $table1->addForeignKeyConstraint($table2, [$columnName1], [$columnName2]); $foreignKeys = $table1->getForeignKeys(); $doctrineResult = array_pop($foreignKeys)->getName(); $generator = new DbIdentifierNameGenerator(); $result = $generator->generateForeignKeyConstraintName($tableName1, [$columnName1]); $this->assertEquals($doctrineResult, $result); }