Laravel: добавление столбца в таблицу с обновленной миграцией - PullRequest
2 голосов
/ 21 октября 2019

Я пытаюсь перенести определенную строку в один файл миграции.

Пример:

До:

Schema::create('categories', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->string('category_name');
  $table->integer('parent_id')->nullable();
  $table->timestamps();
});

После:

Schema::create('categories', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->string('category_name');
  $table->string('img_url'); // ← new column
  $table->integer('parent_id')->nullable();
  $table->timestamps();
});

А теперь я просто хочу перенести строку: $table->string('img_url');

Возможно ли это?

1 Ответ

5 голосов
/ 21 октября 2019

Похоже, вы пытаетесь добавить столбец в таблицу, которая уже была создана с помощью миграции. В этом случае вместо использования Schema::create(...) необходимо использовать Schema::table(...).

Как правило, для этого необходимо создать новую миграцию:

$ php artisan make:migration add_img_url_to_categories

, которая создастновый файл в /database/migrations называется что-то вроде 2019_10_21_165554_add_img_url_to_categories.php. Затем добавьте этот код в функцию up():

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

Другой вариант, который у вас есть, - отредактировать миграцию точно так же, как вы сделали (согласно коду в вашем вопросе), и затем выполните:

$ php artisan migrate:fresh // drop all tables and re-run all migrations

или

$ php artisan migrate:refresh // reset and re-run all migrations

Но имейте в виду, что это обе разрушительные операции - то есть вы потеряете любые данные, которые вы ужеесть в вашей базе данных. На ранних этапах разработки это может не иметь значения. Но вы должны действительно установить привычку создания новых миграций для изменений базы данных, а не редактировать существующие миграции.

Цель миграций состоит в том, чтобы вы (или кто-либо еще)используя ваше приложение) может быстро развернуть базу данных, которая соответствует схеме, которую ожидает ваше приложение. Во время разработки нередки случаи, когда вы редактируете свои миграции, когда вы настраиваете схему базы данных, чтобы приспособить разрабатываемые вами функции.

Однако, как только вы развернули или опубликовали свое приложение, вы должны рассмотреть все миграции набыть заблокирован или только для чтения. Любые изменения в базе данных с этого момента должны быть выполнены при новой миграции.

...