Schema::table('users', function (Blueprint $table) {
$table->dropTimestamps();
$table->dropColumn(['email', 'bio']);
$table->string('email', 20)->unique()->after('id');
$table->string('bio', 150)->after('surname');
$table->timestamps();
});
这就是我现在得到的结果。因此,我的表中的列存在atm,但我想修改和重新排列它们。但当我运行迁移时,我得到了存在email
列的SQL错误。对于bio
和timestamps
,我可能也会得到相同的错误。我有点理解为什么会发生这种情况,所以我要求的只是一个变通方案。
是否可以在一个迁移中创建所需的内容,或者必须创建一个迁移以删除列,然后创建一个单独的迁移以按照所需的方式创建列?
3条答案
按热度按时间dgtucam11#
只需将架构分解为两个调用
这样,更改将在一次 * 迁移 * 中通过两次数据库调用进行。
iyzzxitl2#
请注意,如果删除列,则会丢失其中包含的所有数据。通常情况下,这是一个非常糟糕且危险的想法。如果只需要更改参数,则应使用
change()
函数对模式进行所需的修改。这将转换现有数据,使其达到数据库的最佳性能。永远不要在正在使用的数据库上DROP COLUMNS,除非你完全知道你在做什么。
rnmwe5a23#
这可以通过这种方式来实现。