Обновление данных существующего столбца и копирование данных с миграциями
Можно ли добавить новый столбец, скопировать некоторые данные в этот новый столбец и обновить данные в другом столбце с помощью миграции Laravel?
У меня есть таблица примерно такая;
Можно ли добиться этого с помощью миграции или семени или чего-то еще?
Это изменение необходимо сделать в приложении, которое уже находится в производстве, поэтому удаление и повторное создание таблиц для меня не вариант.
Так же
Любая помощь, которую вы можете мне дать, очень ценится. Спасибо.
1 ответ
Создайте новую миграцию.
Версия 1. создать автоматически командой:
php artisan make:migration add_price_old_to_products_table
Версия 2. Создайте вручную примерно так:
2021_08_18_163618_add_price_old_to_products_table.php
Управляйте контентом, выполнив 3 шага в коде:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class AddPriceOldToProductsTable extends Migration
{
public function up()
{
// 1. creating a new column
Schema::table('products', function (Blueprint $table) {
// this is just an example, you can change this
// NOTE: make sure that the type is the same as "price" column
// for avoiding type conflicts
$table->decimal('price_old', 10, 2)->nullable();
});
// 2. copying the existing column values into new one
DB::statement("UPDATE products SET price_old = price");
// 3. update the old/existing column
// CHANGE YOUR "price" COLUMN HERE...
}
public function down()
{
Schema::table('products', function (Blueprint $table) {
$table->dropColumn('price_old');
});
}
}
Запустите эту миграцию для создания нового столбца:
php artisan migrate