【发布时间】:2014-01-25 18:42:32
【问题描述】:
表“用户”:
|id|name|address|post_code|deleted_at|created_at|
我想在“id”和“deleted_at”之间添加列“phone_nr”
是否可以通过 Laravel 4.1 中的迁移来实现?
【问题讨论】:
标签: laravel laravel-migrations
表“用户”:
|id|name|address|post_code|deleted_at|created_at|
我想在“id”和“deleted_at”之间添加列“phone_nr”
是否可以通过 Laravel 4.1 中的迁移来实现?
【问题讨论】:
标签: laravel laravel-migrations
是的。使用php artisan migrate:make update_users_table 创建一个新的迁移。
然后使用table 命令如下(如果您使用的是 MySQL!):
Schema::table('users', function($table)
{
$table->string('phone_nr')->after('id');
});
完成迁移后,保存并使用php artisan migrate 运行它,您的表格将被更新。
【讨论】:
詹姆斯的回答仍然是正确的。但是,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');
当您运行此迁移时,您会发现您的新字段 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 不存在。
【讨论】:
对于最新版本的 Laravel,说 5-6
命令是
php artisan make:migration update_users_table
然后
php artisan migrate
【讨论】:
如果您需要在 laravel 8 中的特定列之后添加几列:
使用MySQL数据库时,可以使用after方法添加 架构中现有列之后的列:
$table->after('password', function ($table) {
$table->string('address_line1');
$table->string('address_line2');
$table->string('city');
});
【讨论】:
从Laravel 5.1 开始,您还可以先定位一个新的(mysql)列。这是用 Laravel 6 测试的:
Schema::table('foo', function (Blueprint $table) {
$table->increments('id')->first();
});
【讨论】: