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数据库暂不支持在单个迁移中删除或修改多个列。