在当前向上迁移函数中删除然后创建相同的列
Drop and then create same columns in current up migration function
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();
});
这就是我现在所拥有的。因此,我的 table 中已有 atm 列,但我想对它们进行一些修改和重新排列。但是当我 运行 迁移时,我得到 SQL 错误,指出 email
列存在。我可能也会对 bio
和 timestamps
得到同样的错误。我有点理解为什么会这样,所以我想问的只是一个解决方法。
是否可以在一次迁移中完成我想要的,或者我必须创建一个迁移来删除列,然后再创建一个单独的迁移来按照我想要的方式创建它们?
只需将架构分成两个调用
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();
});
}
通过这种方式,更改发生在一次 迁移 和两次数据库调用中。
考虑一下,如果您删除这些列,您将丢失其中包含的所有数据。通常这是一个非常糟糕和危险的想法。如果您只需要更改参数,则应使用 change()
函数对您的模式进行必要的修改。这会将现有数据转换为您的数据库的最佳能力。
永远不要在使用中的数据库中删除列,除非您完全知道自己在做什么。
public function up()
{
Schema::table('users', function (Blueprint $table) {
// Add the unique constraint, for example
$table->string('email', 20)->unique()->after('id')->change();
// Add the length to the bio, for example
$table->string('bio', 150)->after('surname')->change();
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
// Remove length and constraints
$table->string('email')->unique(false)->change();
$table->string('bio')->change();
});
}
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();
});
这就是我现在所拥有的。因此,我的 table 中已有 atm 列,但我想对它们进行一些修改和重新排列。但是当我 运行 迁移时,我得到 SQL 错误,指出 email
列存在。我可能也会对 bio
和 timestamps
得到同样的错误。我有点理解为什么会这样,所以我想问的只是一个解决方法。
是否可以在一次迁移中完成我想要的,或者我必须创建一个迁移来删除列,然后再创建一个单独的迁移来按照我想要的方式创建它们?
只需将架构分成两个调用
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();
});
}
通过这种方式,更改发生在一次 迁移 和两次数据库调用中。
考虑一下,如果您删除这些列,您将丢失其中包含的所有数据。通常这是一个非常糟糕和危险的想法。如果您只需要更改参数,则应使用 change()
函数对您的模式进行必要的修改。这会将现有数据转换为您的数据库的最佳能力。
永远不要在使用中的数据库中删除列,除非您完全知道自己在做什么。
public function up()
{
Schema::table('users', function (Blueprint $table) {
// Add the unique constraint, for example
$table->string('email', 20)->unique()->after('id')->change();
// Add the length to the bio, for example
$table->string('bio', 150)->after('surname')->change();
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
// Remove length and constraints
$table->string('email')->unique(false)->change();
$table->string('bio')->change();
});
}