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)
答案 0 :(得分:1)
对于此处设置,您可以使用枚举数据类型。请尝试在迁移文件中使用以下格式。
$table->enum('test', ['one', 'two', 'three']);