Laravel Ошибка миграции с Sqlite: typeSet не существует - PullRequest
1 голос
/ 02 февраля 2020

TLDR;

Есть ли в SQLite лучший или альтернативный способ использования "set"?

Полная информация

Я пытаюсь запустить миграцию в Laravel, которая отлично работает на MySQL. Однако всякий раз, когда я пытаюсь выполнить ту же миграцию в тестовой базе данных на SQLite, я сталкиваюсь со следующей ошибкой:

In Macroable.php line 103:

  Method Illuminate\Database\Schema\Grammars\SQLiteGrammar::typeSet does not exist.

Я понимаю, что эта ошибка говорит о том, что «набор» не существует в SQLite. Чтобы это исправить, я просто изменил «set» на «string». Однако это неоптимально, так как я хотел бы ограничить это поле указанными c значениями.

В SQLite есть ли лучший или альтернативный способ использования "set"?

Пример:

Вот моя миграция, которая работает с MySQL, но выдает ошибку typeSet, как показано выше:

Schema::create('subscribers', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->set('test', ['one', 'two', 'three']);
    $table->timestamps();
});

Вот мое временное исправление для SQLite база данных:

Schema::create('subscribers', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('test', 255);
    $table->timestamps();
});

Спасибо всем за ваши комментарии и предложения!

(Спасибо @Dilip за ваш ответ! Для всех, кто видит это, если вы хотите узнать больше о разнице между ENUM и SET, этот ответ также был полезен: MySQL enum vs. set )

1 Ответ

1 голос
/ 02 февраля 2020

для установки здесь вы можете использовать тип данных enum. попробуйте формат ниже в файле миграции.

$table->enum('test', ['one', 'two', 'three']);
...