我在项目开始时进行了迁移,基本上添加了一个名为“description”的TEXT列,该列设置为NOT NULL。
现在几个月后我需要改变它以允许null。
我不能使用Laravel 5.5 change()函数,因为我在列列表中有一个枚举,它有bug,所以我需要在迁移中将它添加为原始查询;
DB::statement('ALTER TABLE `galleries` MODIFY `description` TEXT NULL;');
当我做一个php工匠迁移到我的本地mysql数据库时,一切都很好,但是当我尝试运行我的测试套件时,它都会中断。
我使用SQLite作为我的测试套件,我得到的错误如下;
PDOException: SQLSTATE[HY000]: General error: 1 near "MODIFY": syntax error
如果有其他人提出反对这个问题并修复它,我很想知道你是怎么做到的。
由于
答案 0 :(得分:2)
SQLite只允许您重命名表或添加列。 ALTER TABLE语句不能更改或删除列。
要在SQLite中更改或删除列,您需要创建一个包含所需模式的新表,将数据从原始表复制到新表,删除原始表,然后将新表重命名为原来的名字。
这一切都是由Laravel和DBAL抽象出来的,所以你最好的选择可能是找到你的enum专栏的问题帮助(虽然这将是一个单独的问题)。
您可以在SQLite docs here中阅读有关更改表格的更多信息。