2.1 KiB
2.1 KiB
<?php
use App\\MyModel; // модель данных необходимой таблицы
use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\DB;
use Illuminate\\Support\\Facades\\Schema;
class NewFieldMigration extends Migration
{
public function up()
{
// 1. Создаём поле в таблице
Schema::table('some_table',function(Blueprint $table) {
$table->text('new_field')->nullable();
});
// 2. Пишем значения из старого поля в новое
// Обрати внимание на конструкцию update()
// ВАЖНО: не пытайся сделать это внутри метода Schema::table(),
// т.к. новое поле не появится пока этот метод не выполнится,
// и ты словишь исключение mysql при попытке записи в несуществующее поле
Task::query()->update([
"new_field" => DB::raw("`old_field`"),
]);
// 3. Удаляем ненужное поле
Schema::table('some_table',function(Blueprint $table) {
$table->dropColumn('old_field');
});
}
// откат миграции аналогичен, в обратном порядке
public function down()
{
Schema::table('some_table',function(Blueprint $table) {
$table->string('old_field')->nullable();
});
Task::query()->update([
"old_field" => DB::raw("`new_field`"),
]);
Schema::table('some_table',function(Blueprint $table) {
$table->dropColumn("new_field");
});
}
}
http://blog.anthonyaxenov.ru/2019/05/04/laravel-5-8-как-скопировать-значения-из-старой/