Cleaning up foreign key support. Added drop_foreign command.

Signed-off-by: Taylor Otwell <taylorotwell@gmail.com>
This commit is contained in:
Taylor Otwell
2012-03-02 10:23:27 -06:00
parent 2f2437a0e3
commit 1d93cab0d0
5 changed files with 101 additions and 111 deletions

View File

@@ -197,39 +197,6 @@ class MySQL extends Grammar {
return 'ALTER TABLE '.$this->wrap($table)." ADD {$type} {$name}({$keys})";
}
/**
* Generate the SQL statement for creating a foreign key.
*
* @param Table $table
* @param Command $command
* @return string
*/
public function foreign(Table $table, Fluent $command)
{
$name = $command->name;
// We need to wrap both of the table names in quoted identifiers to protect
// against any possible keyword collisions, both the table on which the
// command is being executed and the referenced table are wrapped.
$table = $this->wrap($table);
$on = $this->wrap($command->on);
// Next we need to columnize both the command table's columns as well as
// the columns referenced by the foreign key. We'll cast the referenced
// columns to an array since they aren't by the fluent command.
$foreign = $this->columnize($command->columns);
$referenced = $this->columnize((array) $command->references);
// Finally we can built the SQL. This should be the same for all database
// platforms we support, but we'll just keep it in the grammars since
// adding foreign keys using ALTER isn't supported by SQLite.
$sql = "ALTER TABLE $table ADD CONSTRAINT $name ";
die($sql .= "FOREIGN KEY ($foreign) REFERENCES $on ($referenced)");
}
/**
* Generate the SQL statement for a drop table command.
*
@@ -325,6 +292,18 @@ class MySQL extends Grammar {
return 'ALTER TABLE '.$this->wrap($table)." DROP INDEX {$command->name}";
}
/**
* Drop a foreign key constraint from the table.
*
* @param Table $table
* @param Fluent $fluent
* @return string
*/
public function drop_foreign(Table $table, Fluent $command)
{
return $this->drop_constraint($table, $command);
}
/**
* Generate the data-type definition for a string.
*