RenameColumn.php 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace Illuminate\Database\Schema\Grammars;
  3. use Illuminate\Support\Fluent;
  4. use Doctrine\DBAL\Schema\Column;
  5. use Doctrine\DBAL\Schema\TableDiff;
  6. use Illuminate\Database\Connection;
  7. use Illuminate\Database\Schema\Blueprint;
  8. use Doctrine\DBAL\Schema\AbstractSchemaManager as SchemaManager;
  9. class RenameColumn
  10. {
  11. /**
  12. * Compile a rename column command.
  13. *
  14. * @param \Illuminate\Database\Schema\Grammars\Grammar $grammar
  15. * @param \Illuminate\Database\Schema\Blueprint $blueprint
  16. * @param \Illuminate\Support\Fluent $command
  17. * @param \Illuminate\Database\Connection $connection
  18. * @return array
  19. */
  20. public static function compile(Grammar $grammar, Blueprint $blueprint, Fluent $command, Connection $connection)
  21. {
  22. $column = $connection->getDoctrineColumn(
  23. $grammar->getTablePrefix().$blueprint->getTable(), $command->from
  24. );
  25. $schema = $connection->getDoctrineSchemaManager();
  26. return (array) $schema->getDatabasePlatform()->getAlterTableSQL(static::getRenamedDiff(
  27. $grammar, $blueprint, $command, $column, $schema
  28. ));
  29. }
  30. /**
  31. * Get a new column instance with the new column name.
  32. *
  33. * @param \Illuminate\Database\Schema\Grammars\Grammar $grammar
  34. * @param \Illuminate\Database\Schema\Blueprint $blueprint
  35. * @param \Illuminate\Support\Fluent $command
  36. * @param \Doctrine\DBAL\Schema\Column $column
  37. * @param \Doctrine\DBAL\Schema\AbstractSchemaManager $schema
  38. * @return \Doctrine\DBAL\Schema\TableDiff
  39. */
  40. protected static function getRenamedDiff(Grammar $grammar, Blueprint $blueprint, Fluent $command, Column $column, SchemaManager $schema)
  41. {
  42. return static::setRenamedColumns(
  43. $grammar->getDoctrineTableDiff($blueprint, $schema), $command, $column
  44. );
  45. }
  46. /**
  47. * Set the renamed columns on the table diff.
  48. *
  49. * @param \Doctrine\DBAL\Schema\TableDiff $tableDiff
  50. * @param \Illuminate\Support\Fluent $command
  51. * @param \Doctrine\DBAL\Schema\Column $column
  52. * @return \Doctrine\DBAL\Schema\TableDiff
  53. */
  54. protected static function setRenamedColumns(TableDiff $tableDiff, Fluent $command, Column $column)
  55. {
  56. $tableDiff->renamedColumns = [
  57. $command->from => new Column($command->to, $column->getType(), $column->toArray()),
  58. ];
  59. return $tableDiff;
  60. }
  61. }