Когда вы создаете новый столбец в таблице, вы можете использовать → after ( "имя столбца" ), чтобы диктовать, куда он идет. Как я могу создать миграцию, которая переупорядочивает столбцы в нужном порядке?
Laravel миграция реорганизация порядка столбцов
Ответ 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");
}
Ответ 2
Я бы предложил DB:: query ('.. raw sql query..'); и использовать запрос из ответа "Как перемещать столбцы в таблице MySQL?"
Ответ 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, но с некоторыми изменениями в командах, которые вам нужно ввести в терминал.