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

我不知道如何使用Laravel框架向现有的数据库表中添加新列。

我试图编辑迁移文件使用…

<?php


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

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

如何添加新列?

840458 次浏览

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

Laravel 5+:

php artisan make:migration add_paid_to_users_table --table=users

Laravel 3:

php artisan migrate:make 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 4 / Laravel 5的文档都很好地介绍了这一点:

对于Laravel 3:

编辑:

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

你可以像这样在初始的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();
});

关于这一点,文档相当详尽,并且从版本3版本4并没有太大的变化。

如果您正在使用Laravel 5,命令将是;

php artisan make:migration add_paid_to_users

所有用于制作东西的命令(控制器、模型、迁移等)都被移动到make:命令下。

php artisan migrate仍然是一样的。

我将添加到mike3875的答案,供将来使用Laravel 5.1及后续版本的读者使用。

为了让事情变得更快,你可以像这样使用标志"——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"]选项,这将为你的迁移添加更多的样板文件。这是个小问题,但在做大量的事情时很有帮助!

警告:这是一个破坏性的行动。如果使用这种方法,请确保首先备份数据库。

你可以简单地修改你现有的迁移文件,例如在你的表中添加一个列,然后在你的终端输入:

$ php artisan migrate:refresh

这个东西在laravel 5.1上工作。

首先,在终端上执行这段代码

php artisan make:migration add_paid_to_users --table=users

然后转到项目目录,展开目录database - migration,编辑文件add_paid_to_users.php,添加这段代码

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

然后返回到您的终端并执行此命令

php artisan migrate

希望这对你有所帮助。

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

通过执行:迁移命令创建一个新的迁移

例子:

php artisan make:migration add_store_id_to_users_table --table=users

在database/migrations文件夹中,你有一个新的迁移文件,如下所示:

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

你可以在文档中找到更多关于迁移的信息

首先回滚之前的迁移

php artisan migrate:rollback

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

php artisan migrate

尽管正如其他人所提到的,迁移文件是最佳实践,但在必要时,您也可以使用tinker添加一个列。

$ php artisan tinker

下面是终端的示例一行代码:

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ $table->integer('paid'); })
< p > < br >
(这里是为了便于阅读)

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

向迁移文件中添加列并运行此命令。

php artisan migrate:refresh --path=/database/migrations/your_file_name.php
首先你必须创建一个迁移,你可以在laravel artisan CLI上使用migrate:make命令。旧的laravel版本,比如laravel 4,你可以使用这个命令 对于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');


});


}

Laravel 7

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

    php artisan make:migration add_paid_to_users_table --table=users

  2. 将在迁移文件夹中创建一个文件,在编辑器中打开它。

  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. 执行命令migration using cli command:

    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');

在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

如果您不想将蓝图(模式)拆分为两个迁移文件,那么最好的方法是从数据库中删除表,然后重命名迁移文件的最后一个数字

php artisan migrate

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

执行命令: PHP工匠迁移:新鲜——种子 它将删除该表并重新添加它,更新添加到数据库

的所有列

你能做的就是,

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

写完此写命令后php artisan migratephp artisan refresh . txt 我个人更喜欢的是刷新而不是新迁移,因为如果你做新迁移,它会删除所有的数据,刷新不会

但唯一的例外是,如果你进行了刷新如果你在表中有任何外键那么它就不会重新建立关系所以你会得到这样的错误,

不能添加外键约束

如果这些解决方案都不起作用,你可能已经重新创建了迁移文件,然后添加了一个新列,并试图运行php artisan migrate来更新旧表,它将尝试创建这个表,但这个表已经存在,所以它会给出一个错误。为了解决这个问题,将迁移文件重命名为以前命名的(以日期开始),然后添加新列运行php artisan migrate,这将实际更新旧列而不是创建,解决了我的问题。

在laravel里

php artisan make:migration add_paid_to_users_table --table=users


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


$table->integer('paid');


});


}

在laravel

在现有表中添加新列

php artisan make:migration add_paid_to_users_table

如果您想创建新的迁移,那么执行下面的代码

php artisan make:migration create_users_table --create=users

步骤1

php artisan make:migration add_sex_to_users_table --table=users

步骤2

在新生成的迁移文件中,您将发现up和down钩子方法。在上勾中,添加你想要添加的列,在下勾中,添加你需要删除的列。例如,我需要在用户列上添加性,所以我将在向上钩添加下面的行。

$table->integer('quantity')->default(1)->nullable();

就像这样

public function up()
{
Schema::table('service_subscriptions', function (Blueprint $table) {
$table->integer('quantity')->default(1)->nullable();
});
}

步骤3

执行如下迁移命令

php artisan migrate

然后您将添加一个新列