Laravel 在当前向上迁移函数中删除并创建相同的列
这就是我现在得到的。因此,我的表中有现有的atm列,但我想对它们进行一些修改和重新排列。但是当我运行迁移时,我得到一个SQL错误,即Laravel 在当前向上迁移函数中删除并创建相同的列,laravel,laravel-4,migration,Laravel,Laravel 4,Migration,这就是我现在得到的。因此,我的表中有现有的atm列,但我想对它们进行一些修改和重新排列。但是当我运行迁移时,我得到一个SQL错误,即email列存在。对于bio和时间戳,我可能也会得到相同的错误。我有点理解为什么会发生这种情况,所以我所要求的只是一个解决办法 是否可以在一次迁移中实现我想要的功能,或者我必须创建一个用于删除列的迁移,然后再创建一个单独的迁移,以我想要的方式创建列?只需将架构分成两个调用即可 Schema::table('users', function (Blueprint $t
email
列存在。对于bio
和时间戳
,我可能也会得到相同的错误。我有点理解为什么会发生这种情况,所以我所要求的只是一个解决办法
是否可以在一次迁移中实现我想要的功能,或者我必须创建一个用于删除列的迁移,然后再创建一个单独的迁移,以我想要的方式创建列?只需将架构分成两个调用即可
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();
});
这样,在一次迁移和两次数据库调用中就会发生更改。请考虑,如果删除列,将丢失其中包含的所有数据。通常这是一个非常糟糕和危险的想法。如果只需更改参数,则应使用
change()
函数对模式进行必要的修改。这会将现有数据转换为数据库的最佳功能
除非您完全知道自己在做什么,否则不要在正在使用的数据库中删除列
public function up()
{
Schema::table('users',函数(Blueprint$table){
//例如,添加唯一约束
$table->string('email',20)->unique()->after('id')->change();
//例如,将长度添加到bio
$table->string('bio',150)->在('姓氏')->change()之后;
});
}
公共职能部门
{
Schema::table('users',函数(Blueprint$table){
//删除长度和约束
$table->string('email')->unique(false)->change();
$table->string('bio')->change();
});
}
此解决方案解决了他们的问题,但可能不安全,因为它会导致数据丢失。您应该更改列,而不是删除它们。@Oranges13-问题的标题是“删除,然后创建列”-因此这正是OP要求的。也许,但有时新开发人员会问错误的问题。我公司的一位小开发人员向我提出了这个问题,因为他们说这是他们在谷歌搜索时找到的解决方案,我想确保没有其他人卷入他们可能丢失数据的问题。这就是为什么我提出了另一种解决方案,并为您不想在所有情况下放弃提供了理由。
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dropTimestamps();
$table->dropColumn(['email', 'bio']);
});
Schema::table('users', function (Blueprint $table) {
$table->string('email', 20)->unique()->after('id');
$table->string('bio', 150)->after('surname');
$table->timestamps();
});
}