在迁移中向现有表添加新列

时间:2013-05-28 12:03:43

标签: php laravel laravel-4 laravel-3 laravel-migrations

我无法弄清楚如何使用Laravel框架将新列添加到现有数据库表中。

我尝试使用...

编辑迁移文件
<?php

public function up()
{
    Schema::create('users', function ($table) {
        $table->integer("paid");
    });
}

在终端中,我执行php artisan migrate:installmigrate

如何添加新列?

15 个答案:

答案 0 :(得分:439)

要创建迁移,您可以在Artisan CLI上使用migrate:make命令。使用特定名称以避免与现有模型发生冲突

for Laravel 3:

php artisan migrate:make add_paid_to_users

for Laravel 5 +:

php artisan make:migration add_paid_to_users

然后,您需要使用Schema::table()方法(因为您正在访问现有表,而不是创建新表)。您可以添加如下列:

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('paid');
    });
}

并且不要忘记添加回滚选项:

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('paid');
    });
}

然后您可以运行迁移:

php artisan migrate

Laravel 3的文档中都详细介绍了这一点:

对于Laravel 4 / Laravel 5:

编辑:

使用$table->integer('paid')->after('whichever_column');在特定列之后添加此字段。

答案 1 :(得分:51)

我将使用Laravel 5.1及以后的版本为未来读者添加mike3875的答案。

为了使事情更快,您可以使用标志“--table”,如下所示:

php artisan make:migration add_paid_to_users --table="users"

这将自动添加updown方法内容:

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        //
    });
}

类似地,您可以在创建新迁移时使用--create["table_name"]选项,这将为迁移添加更多样板。小点,但在加载它们时很有帮助!

答案 2 :(得分:24)

如果你正在使用Laravel 5,那么命令就是;

php artisan make:migration add_paid_to_users

所有制作命令(控制器,模型,迁移等)都已在make:命令下移动。

php artisan migrate仍然是相同的。

答案 3 :(得分:17)

您可以在初始Schema::create方法中添加新列,如下所示:

Schema::create('users', function($table) {
    $table->integer("paied");
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

如果您已经创建了表,则可以通过创建新迁移并使用Schema::table方法向该表添加其他列:

Schema::table('users', function($table) {
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

文档对此非常透彻,并且从version 3version 4的变化不大。

答案 4 :(得分:15)

laravel 5.6及更高版本

如果您想将新列作为外键添加到现有表中。

执行以下命令来创建新迁移: make:migration

示例:

php artisan make:migration add_store_id_to_users_table --table=users

在数据库/迁移文件夹中,您具有新的迁移文件,例如:

2018_08_08_093431_add_store_id_to_users_table.php (请参阅评论)

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddStoreIdToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Create new column
            // You probably want to make the new column nullable
            $table->integer('store_id')->unsigned()->nullable()->after('password');

            // 2. Create foreign key constraints
            $table->foreign('store_id')->references('id')->on('stores')->onDelete('SET NULL');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Drop foreign key constraints
            $table->dropForeign(['store_id']);

            // 2. Drop the column
            $table->dropColumn('store_id');
        });
    }
}

之后,运行命令:

php artisan migrate

如果出于任何原因要撤消上一次迁移,请运行以下命令:

php artisan migrate:rollback

您可以在docs

中找到有关迁移的更多信息。

答案 5 :(得分:6)

您只需修改现有的迁移文件,例如在表格中添加一列,然后在终端输入:

$ php artisan migrate:refresh

答案 6 :(得分:4)

这项工作适用于laravel 5.1。

首先,在您的终端上执行此代码

php artisan make:migration add_paid_to_users --table=users

之后转到项目目录并展开目录数据库 - 迁移和编辑文件add_paid_to_users.php,添加此代码

public function up()
{
    Schema::table('users', function (Blueprint $table) {
         $table->string('paid'); //just add this line
    });
}

之后返回终端并执行此命令

php artisan migrate
希望这有帮助。

答案 7 :(得分:2)

第一次回滚您以前的迁移

php artisan migrate:rollback

之后,您可以修改现有的迁移文件(添加新的,重命名或删除列),然后重新运行迁移文件

php artisan migrate

答案 8 :(得分:2)

在 Laravel 8 中

php artisan make:migration add_columnname_to_tablename_table --table=tablename

然后在创建迁移后

public function up()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Create new column
            $table->datatype('column_name')->nullable();
        });
    }
public function down()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Create new column
            $table->dropColumn('column_name');
        });
    }

然后运行

php artisan migrate

如果遇到错误,请使用创建表之前的日期重命名迁移名称,然后再次运行 php artisan migrate

答案 9 :(得分:1)

在迁移文件中添加一列,然后运行此命令。

php artisan migrate:refresh --path=/database/migrations/your_file_name.php

答案 10 :(得分:1)

Laravel 7

  1. 使用cli命令创建迁移文件:

    php artisan make:migration add_paid_to_users_table --table=users

  2. 将在 migrations 文件夹中创建一个文件,然后在编辑器中将其打开。

  3. 添加到功能up():

Schema::table('users', function (Blueprint $table) {
    // Create new column
    // You probably want to make the new column nullable
    $table->integer('paid')->nullable()->after('status');
}
  1. 添加到功能down()中,这将在由于某些原因导致迁移失败的情况下运行:

    $table->dropColumn('paid');

  2. 使用cli命令运行迁移:

    php artisan migrate


如果要向表中添加一列以创建外键约束:

在上述过程的第3步中,您将使用以下代码:

$table->bigInteger('address_id')->unsigned()->nullable()->after('tel_number');

$table->foreign('address_id')->references('id')->on('addresses')->onDelete('SET NULL');

在上述过程的第4步中,您将使用以下代码:

// 1. Drop foreign key constraints
$table->dropForeign(['address_id']);
// 2. Drop the column
$table->dropColumn('address_id');

答案 11 :(得分:0)

尽管迁移文件是最佳做法,就像其他人提到的那样,但在紧要关头,您也可以添加带有修补程序的列。

$ php artisan tinker

以下是终端的单线示例:

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ $table->integer('paid'); })



(此处将其格式化为便于阅读)

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ 
    $table->integer('paid'); 
});

答案 12 :(得分:0)

首先,您必须创建一个迁移,可以在laravel artisan CLI上使用migration:make命令。像laravel 4这样的旧laravel版本可以使用此命令 对于Laravel 4:

php artisan migrate:make add_paid_to_users

对于laravel 5版本

对于Laravel 5 +:

php artisan make:migration add_paid_to_users_table --table=users

然后,您需要使用Schema :: table()。并且您必须添加列:

public function up()

{

    Schema::table('users', function($table) {

        $table->integer('paid');

    });

}

您还可以检查this

答案 13 :(得分:0)

如果您不想将蓝图(架构)拆分为两个迁移文件,那么您可以做的最好的事情是从数据库中删除该表,然后重命名迁移文件的最后一个编号并执行

php artisan migrate

这有助于保护其他表的数据。

答案 14 :(得分:-1)

只需在迁移文件中编辑要添加新列的内容并运行 -->

php artisan migrate:refresh