我是Laravel的初学者。我使用migrate在数据库中创建表,但我不想migrate:rollback
更新我的表。
我想在旧数据库中应用更改而不会丢失当前数据。
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();
});
}
答案 0 :(得分:6)
据我所知,这是不可能的,也不是迁移的意图。我认为有两种方法可以解决这个问题:
如果您尚未投入使用,则可以使用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');
});
}
答案 1 :(得分:1)
是的,在这种情况下,您可以通过运行新的迁移文件来做到这一点
php artisan migrate:make add_family_to_users
这样,将创建一个新的迁移文件,您可以将family列与属性一起添加到其中。关于位置,您可以使用
->之后(“列名”)
指定新创建的列将在何处。例如,在您的情况下,它看起来类似于此
Schema::table('users', function (Blueprint $table)
{
$table->string('family')->after('name');
});
最后,重新运行php artisan migrate
并检查表中是否已添加该列。