Попытка переименовать столбцы таблицы в laravel выдает ошибку - PullRequest
0 голосов
/ 02 мая 2018

Я следую инструкции здесь при изменении столбца в Laravel.

У меня есть стол stores и запустите это в командной строке

php artisan make:migration rename_stores_column --table="stores" --create

После создания миграции

здесь код

class RenameStoresColumn extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('stores', function (Blueprint $table) {
          $table->renameColumn('store_iamge', 'store_image');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('stores', function (Blueprint $table) {
          $table->renameColumn('store_image', 'store_iamge');
        });
    }
}

но когда я бегу php artisan migrate

Я получил эту ошибку,

In Connection.php line 664:

  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'stores' already exists (SQL: create table `stores` (`id` int unsigned not null auto_increment primary key, `name` varchar(255) null, `address` varchar(255) null, `city` varchar(255) null, `zipcode` varc
  har(255) null, `country` varchar(255) null, `state` varchar(255) null, `latitude` double(10, 6) not null, `longitude` double(10, 6) not null, `description` text null, `phone` varchar(255) null, `email` varchar(255) null, `fax` varchar(255) null, `web` varchar(255) n
  ull, `tags` varchar(255) null, `schedule` varchar(255) null, `store_iamge` varchar(255) null, `marker_image` varchar(255) null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8 collate utf8_unicode_ci)


In PDOStatement.php line 143:

  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'stores' already exists

как правильно?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

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

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

Чтобы решить эту проблему, вы можете либо выполнить новую миграцию (php artisan migrate:fresh), но , только если вы находитесь в среде разработчика и не имеете данных для потери .

Или при create_stores_table переносе оберните schema create в schema has, поэтому, даже если он попытается запустить его, если таблица уже существует, он ничего не сделает:

if (!Schema::hasTable('stores')) {
  Schema::create('stores', function (Blueprint $table) {
    $table->increments('id');

    ...
  });
}
0 голосов
/ 02 мая 2018

Вам потребовалось doctrine/dbal?

Предпосылки

Перед изменением столбца обязательно добавьте зависимость doctrine / dbal в ваш файл composer.json. Библиотека Doctrine DBAL используется для определения текущего состояния столбца и создания запросов SQL, необходимых для внесения указанных изменений в столбец:

composer require doctrine/dbal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...