2016-08-01 2 views
1

У меня есть миграция в Postgres и SQLite, и я столкнулся с проблемой с базой данных SQLite. Та же миграция предназначена для двух разных баз данных. Миграция Postgres в порядке, но не SQlite. Я добавил миграцию для изменения таблицы и добавления нового поля.Перемещение Laravel с SQLite

public function up() 
    { 
     Schema::table('retailer_products_photo_fix', function ($table) { 

      $table->integer('currency_id')->unsigned(); 
      $table 
       ->foreign('currency_id') 
       ->references('id') 
       ->on('currency') 
       ->onUpdate('cascade') 
       ->onDelete('cascade') 
      ; 

      $table->dropColumn('currency'); 
     }); 

    } 

Но следующая ошибка была брошена:

General error: 1 Cannot add a NOT NULL column with default value NULL 

Когда я пытаюсь добавить Nullable() поле не создается, и когда я добавляю значение по умолчанию 0 или 1 я получил ограничение ошибку, потому что в связанной table У меня есть строки 1 и 2. Как это можно решить?

+0

Значение по умолчанию для столбцов равно null в SQLite. Поэтому меня больше беспокоит, что 'nullable()' не работает. – Devon

+0

пустая трата времени нет решения до сих пор –

+0

Какова ошибка при объявлении NULL? – Devon

ответ

1

this answer Цитируя Даниэль Vassallo:

SQLite не поддерживает вариант ADD CONSTRAINT команды ALTER TABLE

(Источник, что ответить на использование является here)

Поэтому попытка изменить таблицу, добавив ограничение внешнего ключа, не будет работать. Вам нужно будет:

  1. Переименовать таблицу
  2. Воссоздать таблицу с обновленной структурой (включая ваше ограничение FK)
  3. Заполняем новую таблицу с существующими данными, обеспечивая значения для новых полей
  4. Бросайте старый стол

Вы можете поменять местами # 1 и # 2 так, чтобы создать временную версию своей таблицы, а затем удалить старый или переименовать новый в самом конце, но это зависит от вас. Возможно, более безопасно идти по этому маршруту, если что-то пойдет не так, поскольку в этом случае у вас не будет старой таблицы в переименованном состоянии.

+0

tnx голосовать за мой вопрос –

+0

@VladimirStus это хороший вопрос, спасибо вам. –

+0

да проголосовать –

Смежные вопросы