Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Illuminate\Database\Schema\Grammars;
4
 
5
use Doctrine\DBAL\Schema\AbstractSchemaManager as SchemaManager;
6
use Doctrine\DBAL\Schema\Column;
7
use Doctrine\DBAL\Schema\TableDiff;
8
use Illuminate\Database\Connection;
9
use Illuminate\Database\Schema\Blueprint;
10
use Illuminate\Support\Fluent;
11
 
12
class RenameColumn
13
{
14
    /**
15
     * Compile a rename column command.
16
     *
17
     * @param  \Illuminate\Database\Schema\Grammars\Grammar  $grammar
18
     * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
19
     * @param  \Illuminate\Support\Fluent  $command
20
     * @param  \Illuminate\Database\Connection  $connection
21
     * @return array
22
     */
23
    public static function compile(Grammar $grammar, Blueprint $blueprint, Fluent $command, Connection $connection)
24
    {
25
        $schema = $connection->getDoctrineSchemaManager();
26
        $databasePlatform = $schema->getDatabasePlatform();
27
        $databasePlatform->registerDoctrineTypeMapping('enum', 'string');
28
 
29
        $column = $connection->getDoctrineColumn(
30
            $grammar->getTablePrefix().$blueprint->getTable(), $command->from
31
        );
32
 
33
        return (array) $databasePlatform->getAlterTableSQL(static::getRenamedDiff(
34
            $grammar, $blueprint, $command, $column, $schema
35
        ));
36
    }
37
 
38
    /**
39
     * Get a new column instance with the new column name.
40
     *
41
     * @param  \Illuminate\Database\Schema\Grammars\Grammar  $grammar
42
     * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
43
     * @param  \Illuminate\Support\Fluent  $command
44
     * @param  \Doctrine\DBAL\Schema\Column  $column
45
     * @param  \Doctrine\DBAL\Schema\AbstractSchemaManager  $schema
46
     * @return \Doctrine\DBAL\Schema\TableDiff
47
     */
48
    protected static function getRenamedDiff(Grammar $grammar, Blueprint $blueprint, Fluent $command, Column $column, SchemaManager $schema)
49
    {
50
        return static::setRenamedColumns(
51
            $grammar->getDoctrineTableDiff($blueprint, $schema), $command, $column
52
        );
53
    }
54
 
55
    /**
56
     * Set the renamed columns on the table diff.
57
     *
58
     * @param  \Doctrine\DBAL\Schema\TableDiff  $tableDiff
59
     * @param  \Illuminate\Support\Fluent  $command
60
     * @param  \Doctrine\DBAL\Schema\Column  $column
61
     * @return \Doctrine\DBAL\Schema\TableDiff
62
     */
63
    protected static function setRenamedColumns(TableDiff $tableDiff, Fluent $command, Column $column)
64
    {
65
        $tableDiff->renamedColumns = [
66
            $command->from => new Column($command->to, $column->getType(), self::getWritableColumnOptions($column)),
67
        ];
68
 
69
        return $tableDiff;
70
    }
71
 
72
    /**
73
     * Get the writable column options.
74
     *
75
     * @param  \Doctrine\DBAL\Schema\Column  $column
76
     * @return array
77
     */
78
    private static function getWritableColumnOptions(Column $column)
79
    {
80
        return array_filter($column->toArray(), function (string $name) use ($column) {
81
            return method_exists($column, 'set'.$name);
82
        }, ARRAY_FILTER_USE_KEY);
83
    }
84
}