如何在laravel数据库中创建列而不丢失数据

Dip*_*kar 3 laravel

假设我有一个名为“ foo”的表,其中包含数据,并且还包含外键。现在,我想在此表中创建一个名为“ description”的列。在没有重置或回滚的情况下如何迁移此表?因为如果我重置或回滚表,那么所有数据都会丢失。

Jam*_*mes 6

根据docs,您只需要创建一个单独的迁移即可创建新列。

创建迁移

php artisan make:migration add_description_to_foo

然后只需设置要添加的详细信息即可进行迁移,例如:

Schema::table('foo', function ($table) {
    $table->text('description');
});
Run Code Online (Sandbox Code Playgroud)

然后,您可以迁移它:

php artisan migrate

这将使您无需重新设置或回滚表即可添加列,从而防止丢失数据。


Mah*_*lam 5

让我们从您的架构开始。你的表名是foo. 您想要descriptionfoo表中添加一列而不丢失现有数据。您需要为此更改创建新的迁移。

php artisan make:migration add_columns_to_foo_table --table=foo
Run Code Online (Sandbox Code Playgroud)

将在您的迁移目录中创建一个新的迁移文件。打开它并像这样更改它:

Schema::table('foo', function ($table) {
    $table->text('description');
});
Run Code Online (Sandbox Code Playgroud)

保存然后运行

php artisan migrate
Run Code Online (Sandbox Code Playgroud)

description将立即创建列,而不会丢失最后一列的旧数据。如果你想重新定位description列,你需要使用after(如果是 MySQL),如下所示:

Schema::table('foo', function ($table) {
        $table->text('description')->after('another_column');
});
Run Code Online (Sandbox Code Playgroud)

希望你明白了。

您可以在这里找到更多详细信息:https ://laravel.com/docs/5.3/migrations#creating-columns