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');
运行此迁移时,您会发现新字段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 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