Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 23.02.2016 12:02:42

Применение миграций без потери данных.

Собственно вопрос в том как реализовать применение миграций без потери данных. Сиды не вариант.

Простой пример:
проект в разработке, тестируют 10 пользователей (допустим создали для них сиды),
потом через некоторое время у нас уже 20 пользователей в таблице, и понадобилось добавить в таблицу Users одну колонку,
это опять придётся всех добавлять в сид?

Может есть какой-то вариант по проще, чтобы в действующую таблицу добавлять колонки без потери данных?

Не в сети

#2 23.02.2016 12:51:52

Re: Применение миграций без потери данных.

Сид то зачем? Делаешь добавление колонки и все

Schema::table('users', function (Blueprint $table) {           
            $table->string('new_column');

        });

Не в сети

#3 23.02.2016 12:56:09

Re: Применение миграций без потери данных.

Ну так после добавления колонки, я начинаю применять изменения
php artisan migrate:refresh 
Пробовал
php artisan migrate
пишет, что нет изменений.

P.S. таблица дропается из down, а если drop убрать, то миграция прекращает работать, говорит такая таблица уже существует.

Изменено delphiec (23.02.2016 12:57:15)

Не в сети

#4 23.02.2016 13:05:05

Re: Применение миграций без потери данных.

Все прекрасно работает: делаешь миграцию
php artisan make:migration some_name
идешь в нее
в метод up

public function up()
{
       Schema::table('users', function (Blueprint $table) {            
            $table->string('new_column');
        });
}

делаешь php artisan migrate

Изменено VitalN (23.02.2016 13:06:00)

Не в сети

#5 23.02.2016 13:31:49

Re: Применение миграций без потери данных.

Добавил для теста поле 'levelNeed'

    public function up()
    {
        Schema::create('charCategories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('caption');
            $table->string('createdBy')->default('system');
            $table->integer('levelNeed')->default('0');
            $table->timestamps();
        });
    }

root@delphiec:/var/www/testing_folder# php artisan migrate                                                                                                                                       
Nothing to migrate.

Не в сети

#6 23.02.2016 13:34:10

Re: Применение миграций без потери данных.

Всё, вижу косяк
Schema::create

Schema::table

Тогда вопрос, как сделать так, чтобы не переписывать create на table?

P.S. Поторопился с ответом

Всё равно получаю
root@delphiec:/var/www/testing_folder# php artisan migrate
Nothing to migrate.

Изменено delphiec (23.02.2016 13:35:16)

Не в сети

#7 23.02.2016 13:59:38

duster
Откуда: Мельбурн
Сообщений: 148

Re: Применение миграций без потери данных.

Надо сделать новую миграцию, а не редактировать старую. Либо сделать рефреш всех миграций — тогда это заново запустится (php artisan migrate:refresh --seed)

В принципе, в демо (staging) среде можно просто редактировать оригинальную миграцию и рефрешить. Когда проект будет в production — даже такую мелочь надо будет отдельной миграцией делать со Schema::table(). Метод down() тоже важен — не забывайте откат указывать.

php artisan make:migration add_levelneed_column --table=charCategories

В database/migrations/ появился файл с add_levelneed_column в имени, в нем делаем:

PHP
    public function up()
    {
        
Schema::table('charCategories', function (Blueprint $table) {
            
$table->integer('levelNeed')->default('0');
        });
    }

    public function 
down()
    {
        
Schema::table('charCategories', function (Blueprint $table) {
            
$table->dropColumn('levelNeed');
        });
    }

Не в сети

Подвал раздела