53 lines
2.1 KiB
Markdown
53 lines
2.1 KiB
Markdown
|
```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/)
|