在特定的其他列之前或之后添加sql表列 - 通过Laravel 4.1中的迁移



Table 'users':

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

我想在"id"和"deleted_at"之间的某个地方添加"phone_nr"列

在 Laravel 4.1 中进行迁移是否可行?

是的。 使用 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

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

php artisan make:migration add_google_auth_to_users_table --table=users

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

对于其他任何想知道@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');

运行此迁移时,您会发现新字段colcol2、...在参考字段 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不存在。

如果您需要在 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

从 Laravel 5.1 开始,您还可以先放置一个新的 (mysql) 列。这是用Laravel 6测试的:

Schema::table('foo', function (Blueprint $table) {
    $table->increments('id')->first();
});

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

该命令是

php artisan make:migration update_users_table

然后

php artisan migrate

相关内容

  • 没有找到相关文章