【发布时间】:2017-02-17 11:00:15
【问题描述】:
我使用的是 laravel 5.2,我通常会根据项目要求更新我的数据库,所以我想在不丢失数据库记录的情况下这样做。 我不是说如何播种我的数据库。我的意思是当我的数据库处于活动状态并且我想更新它时抛出 laravel 迁移。 我本来想扔Laravel Documentation但我什么也没找到,所以我希望能找到人帮助我
【问题讨论】:
标签: php laravel-5.2
我使用的是 laravel 5.2,我通常会根据项目要求更新我的数据库,所以我想在不丢失数据库记录的情况下这样做。 我不是说如何播种我的数据库。我的意思是当我的数据库处于活动状态并且我想更新它时抛出 laravel 迁移。 我本来想扔Laravel Documentation但我什么也没找到,所以我希望能找到人帮助我
【问题讨论】:
标签: php laravel-5.2
由于您的表中已经有数据,因此您可以创建新的迁移文件来更新您的表,而不是回滚迁移(这会导致现有数据丢失)。假设您有一个表users,其中列name, email, password。您将数据存储在该表中。然后您意识到您还需要在您的用户表中添加一个名为mobile_no 的新列。为此,您需要创建一个新的迁移文件。命令将是:
php artisan make:migration add_mobile_no_columns_to_users_table --table=users
这样会创建一个新的迁移文件。在那里设置您的列详细信息,使用php artisan migrate 运行迁移,仅此而已。您将在 users 表中拥有这个新列,而不会丢失以前存储的数据。
【讨论】:
请注意,当您在已有数据的情况下为表添加新列时,您必须为新列设置默认值或使其为可空类型..否则您会报错
【讨论】:
确保当您在表中添加新列时,该列应该可以为空,并且不应该是唯一的。否则你将面临错误。因为当创建一个新列时,它将是空的(不是唯一的)。在这种情况下,您必须回滚迁移。
【讨论】:
使用
进行新的迁移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 migrate
【讨论】: