Laravel по-русски

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

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

#1 31.05.2020 10:42:48

Добавление\удаление столбцов в миграции

Здравствуйте
Почитал документацию, если с добавлением столбцов я всё понял, то с удалением не совсем. Получается, мало создать миграцию с Schema::table, надо еще устанавливать некую библиотеку, которая реализует удаление столбцов? Как грамотно на практике реализовывать такую задачу? Спасибо большое!!!

Не в сети

#2 31.05.2020 22:43:56

Re: Добавление\удаление столбцов в миграции

нет, такая библиотека не требуется.
Вот пример такой миграции

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class UserRoles extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('user', function (Blueprint $table) {
            $table->json('roles')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('user', function (Blueprint $table) {
            $table->dropColumn('roles');
        });
    }
}

Здесь Вы видите создание столбца roles и откат миграции, при котором удаляется этот столбец.
Разумеется Вы можете поменять действия в up/down местами, тогда миграция будет удалять столбец, а при откате создавать его.

Изменено nailfor (31.05.2020 22:44:22)

Не в сети

#3 01.06.2020 06:40:43

Re: Добавление\удаление столбцов в миграции

Вообще-то принято показывать конкретный код и сообщение об ошибке чтобы мы не гадали.

Может быть твоя колонка участвует в каких-то отношениях? Или у тебя в одном блоке удаляется колонка и создаётся новая с тем же именем?

Ещё частные случаи, которые не могут быть обработаны стандартными миграциями и приходится что-то добавлять в composer или вызывать DB::statement("ALTER TABLE...")
На вскидку помню сложности с enum.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#4 01.06.2020 10:11:32

Re: Добавление\удаление столбцов в миграции

nailfor, artoodetoo

Извиняюсь, просто я еще и код не писал, а в документации читал, там написано про зависимость: doctrine/dbal
Поэтому я и спросил. Так она нужна или нет? Я уже попробовал и удалять и изменять, но она у меня стоит, и всё работает. Вот текст с документации:

Удаление столбцов
Для удаления столбца используйте метод dropColumn на построителе структур. Перед удалением столбцов из базы данных SQLite вам необходимо добавить зависимость doctrine/dbal в ваш файл composer.json и выполнить команду composer update для установки библиотеки:

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn('votes');
});

Изменено JohnnyDoe (01.06.2020 10:12:40)

Не в сети

#5 01.06.2020 21:38:46

Re: Добавление\удаление столбцов в миграции

doctrine/dbal — раз написано в доке, значит нужна ) Другое дело что она возможно и без явного добавления уже в твоих зависимостях. Если заглянуть в composer.lock, можно обнаружить мноооого вторичных зависимостей.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#6 02.06.2020 10:28:27

Re: Добавление\удаление столбцов в миграции

doctrine/dbal — раз написано в доке, значит нужна ) Другое дело что она возможно и без явного добавления уже в твоих зависимостях. Если заглянуть в composer.lock, можно обнаружить мноооого вторичных зависимостей.

Блэээн, как же я не догадался, хотя подозревал, что скорее всего так уже давно сделано) Спасибо за ответ!)

Не в сети

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