我使用laravel 5.2并且我通常会根据项目要求更新我的数据库,所以我想在不丢失数据库记录的情况下这样做。 我并不是指如何为我的数据库设定种子。我的意思是当我的数据库存在并且我想要更新它时抛出laravel迁移。 我要去Laravel Documentation,但我一无所获,所以我希望找到一个帮助我的人
答案 0 :(得分:45)
由于您的表中已有数据,因此您可以创建新的迁移文件来更新表,而不是回滚迁移(这会导致数据丢失)。假设您有一个包含users
列的表name, email, password
。您将数据存储在该表中。然后您意识到您还需要在users表中添加一个名为mobile_no
的新列。为此,您需要创建一个新的迁移文件。命令将是:
php artisan make:migration add_mobile_no_columns_to_users_table --table=users
这样就会创建一个新的迁移文件。在那里设置列详细信息,使用php artisan migrate
和所有内容运行迁移。您将在users
表格中拥有此新列,而不会丢失以前存储的数据。
答案 1 :(得分:2)
请注意,当您在已经有数据的情况下为表添加新列时,您必须为新列设置默认值或使其为可空类型..否则您将以错误结束
答案 2 :(得分:1)
确保在表中添加新列时,该列应为可空值,并且不应唯一。否则,您将面临错误。因为当创建新列时,它将为空(不是唯一的)。在这种情况下,您必须回滚迁移。
答案 3 :(得分:0)
通过以下方式进行新迁移
php artisan make:migration change_body_to_nullable_in_reviews_table --table=reviews
放置此位置
public function up()
{
Schema::table('reviews', function (Blueprint $table) {
$table->text('body')->nullable()->change();
});
}
public function down()
{
Schema::table('reviews', function (Blueprint $table) {
$table->text('body')->nullable(false)->change();
});
}
然后运行PHP artisan migration