在 Laravel 5.1 中更新 table 结构而不回滚
Update table structure without rollback in Laravel 5.1
我是 Laravel 的初学者。我使用 migrate 在数据库中创建 tables,但我不想 migrate:rollback
更新我的 table.
我想在我的旧数据库中应用更改而不丢失当前数据。
老迁移
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
}
新迁移
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('family');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
}
据我所知,这是不可能的,也不是迁移的意图。我认为有两种选择可以解决这个问题:
如果您不在生产环境中,您可以更改迁移脚本并使用 mysql:
手动添加额外的列
alter table users add column family varchar(255);
如果您需要更新生产数据库,您应该添加第二个迁移脚本,只添加额外的列,例如:
public function up()
{
Schema::table('users', function(Blueprint $table)
{
$table->string('family')->after('user_id');
});
}
public function down()
{
Schema::table('users', function(Blueprint $table)
{
$table->dropColumn('family');
});
}
是的,在这种情况下,您可以通过 运行创建一个新的迁移文件来做到这一点
php artisan migrate:make add_family_to_users
这样,将创建一个新的迁移文件,您可以将 family 列与属性一起添加到其中。关于位置,可以用
->after('column name ')
指定新创建的列的前面。例如,在您的情况下,它看起来类似于此
Schema::table('users', function (Blueprint $table)
{
$table->string('family')->after('name');
});
最后,重新运行 php artisan migrate
并检查您的 table 是否已添加该列。
我是 Laravel 的初学者。我使用 migrate 在数据库中创建 tables,但我不想 migrate:rollback
更新我的 table.
我想在我的旧数据库中应用更改而不丢失当前数据。
老迁移
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
}
新迁移
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('family');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
}
据我所知,这是不可能的,也不是迁移的意图。我认为有两种选择可以解决这个问题:
如果您不在生产环境中,您可以更改迁移脚本并使用 mysql:
手动添加额外的列alter table users add column family varchar(255);
如果您需要更新生产数据库,您应该添加第二个迁移脚本,只添加额外的列,例如:
public function up() { Schema::table('users', function(Blueprint $table) { $table->string('family')->after('user_id'); }); } public function down() { Schema::table('users', function(Blueprint $table) { $table->dropColumn('family'); }); }
是的,在这种情况下,您可以通过 运行创建一个新的迁移文件来做到这一点
php artisan migrate:make add_family_to_users
这样,将创建一个新的迁移文件,您可以将 family 列与属性一起添加到其中。关于位置,可以用
->after('column name ')
指定新创建的列的前面。例如,在您的情况下,它看起来类似于此
Schema::table('users', function (Blueprint $table)
{
$table->string('family')->after('name');
});
最后,重新运行 php artisan migrate
并检查您的 table 是否已添加该列。