Laravel创建数据库表结构的例子(4)

列修改器

除了上面列出的列类型之外,在添加列的时候还可以使用一些其它列“修改器”,例如,要使列默认为null,可以使用nullable方法:

Schema::table(‘users', function (table) {table) {table->string(‘email')->nullable(); 
}); 

下面是所有可用的列修改器列表,该列表不包含索引修改器:

修改器 描述

->after('column') 将该列置于另一个列之后 (仅适用于MySQL)
->comment('my comment') 添加注释信息
->default($value) 指定列的默认值
->first() 将该列置为表中第一个列 (仅适用于MySQL)
->nullable() 允许该列的值为NULL
->storedAs($expression) 创建一个存储生成列(只支持MySQL)
->unsigned() 设置 integer 列为 UNSIGNED
->virtualAs($expression) 创建一个虚拟生成列(只支持MySQL)

修改列

先决条件

在修改列之前,确保已经将doctrine/dbal依赖添加到composer.json文件,Doctrine DBAL 库用于判断列的当前状态并创建对列进行指定调整所需的SQL语句:

composer require doctrine/dbal

更新列属性

change方法允许你修改已存在的列为新的类型,或者修改列的属性。例如,你可能想要增加 string 类型列的尺寸,让我们将name列的尺寸从 25 增加到 50:

Schema::table('users', function ($table) {
 $table->string('name', 50)->change();
});

我们还可以修改该列允许 NULL 值:

Schema::table('users', function ($table) {
 $table->string('name', 50)->nullable()->change();
});

重命名列

要重命名一个列,可以使用表结构构建器上的renameColumn方法,在重命名一个列之前,确保doctrine/dbal依赖已经添加到composer.json文件:

Schema::table('users', function ($table) {
 $table->renameColumn('from', 'to');
});

注:暂不支持enum类型的列的修改和重命名。

删除列

要删除一个列,使用schema构建器上的dropColumn方法:

Schema::table('users', function ($table) {
 $table->dropColumn('votes');
});

你可以传递列名数组到dropColumn方法从表中删除多个列:

Schema::table('users', function ($table) {
 $table->dropColumn(['votes', 'avatar', 'location']);
});

注:在从SQLite数据库删除列之前,需要添加doctrine/dbal依赖到composer.json文件并在终端中运行composer update命令来安装该库。此外,SQLite数据库暂不支持在单个迁移中删除或修改多个列。