Laravel迁移并出现Sqlite错误:typeSet不存在

时间:2020-02-02 12:26:31

标签: laravel sqlite laravel-migrations

TLDR;

在SQLite中,有没有更好的方法或替代方法来使用“设置”?

完整信息

我正在尝试在Laravel中运行迁移,该迁移在MySQL上运行良好。但是,每当尝试在SQLite上的测试数据库上运行相同的迁移时,都会遇到以下错误:

In Macroable.php line 103:

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

我了解到该错误表明SQLite中不存在“设置”。为了解决此问题,我只是将“ set”更改为“ string”。但是,这是次优的,因为我想将该字段限制为特定值。

在SQLite中,有没有更好的方法或替代方法来使用“设置”?

示例:

这是我的可用于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 个答案:

答案 0 :(得分:1)

对于此处设置,您可以使用枚举数据类型。请尝试在迁移文件中使用以下格式。

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