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

Posted

技术标签:

【中文标题】在特定的其他列之前或之后添加 sql 表列 - 通过 Laravel 4.1 中的迁移【英文标题】:Add sql table column before or after specific other column - by migrations in Laravel 4.1 【发布时间】:2014-01-25 18:42:32 【问题描述】:

表“用户”:

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

请注意,您可以将“after”值更改为您选择的列。 将它添加到表格的最前面怎么样? 如果我需要在特定列之后背靠背添加两列怎么办。 $table->integer('col1')->after('ref_col'); $table->integer('col2')->after('what'); 您必须将命令更改为 php artisan make:migration update_user_table @rahulsingh 近 2 年可能对您没有多大用处,但请参阅下面的***.com/a/56645714/1372355 我对您的背靠背新列查询的回答。【参考方案2】:

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

php artisan make:migration add_google_auth_to_users_table --table=users

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

【讨论】:

已经发现迁移命令略有不同,但可能对寻找 Laravel 5 解决方案的其他人有所帮助。正如您正确提到的,这在通用 Laravel 搜索中排名很高。【参考方案3】:

对于其他想知道@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 不存在。

【讨论】:

感谢您的回复,但它对我来说就像这样 $table->integer('col1')->after('ref_col'); $table->integer('col2')->after('col1');【参考方案4】:

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

命令是

php artisan make:migration update_users_table

然后

php artisan migrate

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

以上是关于在特定的其他列之前或之后添加 sql 表列 - 通过 Laravel 4.1 中的迁移的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL - 替换表列中特定字符的所有实例

使用 Azure SQL 将不同的表列合并为一个

如何在特定列之后添加 SQL 中的列?

将上下文菜单添加到特定的 Qtablewdiget 表列,Python

将JSON数组作为SQL表列之一读取

MySQL - 根据更新其他表列值触发更新列值