tech-tips/Языки программирования/PHP/Laravel/Laravel 5.8- как скопировать значения из старой колонки в новую во время миграции.md

53 lines
2.1 KiB
Markdown
Raw Permalink Normal View History

```PHP
<?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-как-скопировать-значения-из-старой/](http://blog.anthonyaxenov.ru/2019/05/04/laravel-5-8-%d0%ba%d0%b0%d0%ba-%d1%81%d0%ba%d0%be%d0%bf%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d1%82%d1%8c-%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b7-%d1%81%d1%82%d0%b0%d1%80%d0%be%d0%b9/)