Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Собственно вопрос в том как реализовать применение миграций без потери данных. Сиды не вариант.
Простой пример:
проект в разработке, тестируют 10 пользователей (допустим создали для них сиды),
потом через некоторое время у нас уже 20 пользователей в таблице, и понадобилось добавить в таблицу Users одну колонку,
это опять придётся всех добавлять в сид?
Может есть какой-то вариант по проще, чтобы в действующую таблицу добавлять колонки без потери данных?
Не в сети
Сид то зачем? Делаешь добавление колонки и все
Schema::table('users', function (Blueprint $table) {
$table->string('new_column');
});
Не в сети
Ну так после добавления колонки, я начинаю применять изменения
php artisan migrate:refresh
Пробовал
php artisan migrate
пишет, что нет изменений.
P.S. таблица дропается из down, а если drop убрать, то миграция прекращает работать, говорит такая таблица уже существует.
Изменено delphiec (23.02.2016 12:57:15)
Не в сети
Все прекрасно работает: делаешь миграцию
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)
Не в сети
Добавил для теста поле '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.
Не в сети
Всё, вижу косяк
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)
Не в сети
Надо сделать новую миграцию, а не редактировать старую. Либо сделать рефреш всех миграций — тогда это заново запустится (php artisan migrate:refresh --seed)
В принципе, в демо (staging) среде можно просто редактировать оригинальную миграцию и рефрешить. Когда проект будет в production — даже такую мелочь надо будет отдельной миграцией делать со Schema::table(). Метод down() тоже важен — не забывайте откат указывать.
php artisan make:migration add_levelneed_column --table=charCategories
В database/migrations/ появился файл с add_levelneed_column в имени, в нем делаем:
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');
});
}
Не в сети
Страницы 1