59

表“用户”:

|id|name|address|post_code|deleted_at|created_at|

我想在“id”和“deleted_at”之间添加列“phone_nr”

是否可以通过 Laravel 4.1 中的迁移来实现?

4

6 回答 6

169

是的。使用php artisan migrate:make update_users_table.

然后使用table如下命令(如果您使用的是 MySQL!):

Schema::table('users', function($table)
{
    $table->string('phone_nr')->after('id');
});

完成迁移后,保存并使用它运行它php artisan migrate,您的表将被更新。

文档:https ://laravel.com/docs/4.2/migrations#column-modifiers

于 2014-01-07T21:47:30.493 回答
15

詹姆斯的回答仍然是正确的。然而,Laravel 5 稍微改变了 make 迁移语法:

php artisan make:migration add_google_auth_to_users_table --table=users

(我知道这个问题被标记为 Laravel 4,但是它在这个问题上的排名很高;))

于 2016-09-23T21:28:35.797 回答
8

对于其他想知道@rahulsingh 关于在单个特定列之后背靠背添加多个列的查询的人:

$table->integer('col1')->after('ref_col');
$table->integer('col2')->after('what');

您可以通过以相反的顺序编写新字段来做到这一点,例如:

$table->integer('col4')->after('ref_col');
$table->integer('col3')->after('ref_col');
$table->integer('col2')->after('ref_col');
$table->integer('col1')->after('ref_col');

当您运行此迁移时,您会发现您的新字段col, col2, ... 在参考字段之后按照您的预期顺序排列ref_col

不幸的是,没有before()在现有字段之前添加字段的功能。(如果存在,我们可以保持上述陈述的真实顺序。)


不能使用尚不存在的字段进行链接,例如:

$table->integer('col1')->after('ref_col');
$table->integer('col2')->after('col1');
$table->integer('col3')->after('col2');
$table->integer('col4')->after('col3');

这是因为迁移蓝图被编译为单个查询,因此作为一个查询执行,因此在添加col2数据库引擎时会抱怨col1不存在。

于 2019-06-18T09:17:46.837 回答
6

如果您需要在 laravel 8 中的特定列之后添加几列:

使用 MySQL 数据库时,可以使用 after 方法在模式中的现有列之后添加列:

$table->after('password', function ($table) {
    $table->string('address_line1');
    $table->string('address_line2');
    $table->string('city');
});

https://laravel.com/docs/8.x/migrations#column-order

于 2021-04-13T19:10:27.840 回答
-1

Laravel 5.1 开始,你也可以先定位一个新的(mysql)列。这是用 Laravel 6 测试的:

Schema::table('foo', function (Blueprint $table) {
    $table->increments('id')->first();
});
于 2021-12-22T16:52:54.083 回答
-2

对于最新版本的 Laravel,请说 5-6

命令是

php artisan make:migration update_users_table

然后

php artisan migrate
于 2020-04-14T11:39:51.447 回答