Laravel миграция реорганизация порядка столбцов

Когда вы создаете новый столбец в таблице, вы можете использовать → after ( "имя столбца" ), чтобы диктовать, куда он идет. Как я могу создать миграцию, которая переупорядочивает столбцы в нужном порядке?

Ответ 1

Попробуйте это, надеюсь, что это поможет вам найти правильное решение:

public function up()
{

    DB::statement("ALTER TABLE example MODIFY COLUMN foo DATE AFTER bar");

}

public function down()
{

    DB::statement("ALTER TABLE example MODIFY COLUMN foo DATE AFTER bar");

}

Ответ 3

Если вы хотите сделать это без уничтожения данных, вы можете перенести данные в одно и то же время, когда вы выполните обновление схемы:

use DB;

public function up()
{
    //Give the moving column a temporary name:
    Schema::table('users', function($table)
    {
        $table->renameColumn('name', 'name_old');
    });

    //Add a new column with the regular name:
    Schema::table('users', function(Blueprint $table)
    {
        $table->string('name')->after('city');
    });

    //Copy the data across to the new column:
    DB::table('users')->update([
        'name' => DB::raw('name_old')   
    ]);

    //Remove the old column:
    Schema::table('users', function(Blueprint $table)
    {
        $table->dropColumn('name_old');
    });
}

Ответ 4

Предположим, что ваше имя столбца address, и вы хотите изменить порядок его позиции, чтобы он появился после другого столбца с именем city, а ваше имя таблицы employees.

В вашем терминале введите следующую команду:

php artisan migrate:make reorganize_order_of_column_address --table=employees

Вы можете изменять только reorganize_order_of_column_address и employees в соответствии с вашими потребностями, но сохраняйте остальную часть команды как есть.

Это приведет к созданию файла миграции в папке app/database/migrations, откройте его и поместите код внутри функции up() следующим образом:

public function up()
{
    Schema::table('employees', function(Blueprint $table)
    {
        $table->dropColumn("address");
    });

    Schema::table('employees', function(Blueprint $table)
    {
        $table->string('address')->after("city");
    });
}

Обратите внимание, что этот метод удалит столбец и все данные, которые были сохранены в нем, и создаст новый столбец с тем же именем после обнаруженного столбца, а вновь созданный будет пустым.

Этот способ работал у меня в Laravel 4.2, и он также может работать в Laravel 5, но с некоторыми изменениями в командах, которые вам нужно ввести в терминал.