在Laravel迁移中使列不可为空

bil*_*alq 112 php sql database-migration laravel

我正在编写一个迁移,以便立即在表格中创建某些列nullable.对于down函数,我当然希望not nullable再次创建这些列.我浏览了架构生成器文档,但看不到这样做的方法.

任何帮助,将不胜感激.

小智 193

在Laravel 5之前,没有使用模式构建器更改现有表列的Laravel本机方法.您需要使用原始查询.

但是,从Laravel 5开始,您可以使用:

$table->...->nullable(false)->change();
Run Code Online (Sandbox Code Playgroud)

  • 请参阅下面的@MatMcDonald的回答.您可以使用nullable()使其为可空和可空(false),以使其在迁移中不可为空. (5认同)
  • `nullable(false)`在Laravel 5.3中对我不起作用:( (5认同)
  • 泰勒奥特威尔(Laravel的创造者)6天前(2014-05-09)说:"我仍然支持我的说法,即如果有人能成功干净地做到这一点,我会合并它." https://github.com/laravel/framework/issues/895#issuecomment-42709756 (3认同)
  • @Musa显然你可以设置一个可以为空的列(例如:`$ table-> string('colmn',255) - > nullable() - > change();`)但反向似乎不起作用(`$ table-> string('colmn',255) - > change();`),所以你仍然需要使用原始数据库查询 (3认同)

Mat*_*ald 37

从Laravel 5开始,可以原生地反转它 - 只需将false作为参数传递给nullable().

例如

$table -> string('foo') -> nullable(false) -> change();
Run Code Online (Sandbox Code Playgroud)

  • 默认情况下,列是非空的。海报只是询问如何反转已经为空的列。 (2认同)
  • 首先需要`composer需要doctrine/dbal` (2认同)

Gab*_*dez 10

您可以在不使用 ->nullable() 的情况下再次声明该列并使用 ->change

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->type('column')->nullable(false)->change();
    });
}

public function down()
{
    Schema::table('table_name', function ($table) {
        $table->type('column')->nullable()->change();
    });
}
Run Code Online (Sandbox Code Playgroud)


fun*_*err 7

首先运行这个:

composer require doctrine/dbal

然后创建一个迁移来改变表,如下所示:

php artisan make:migration fix_whatever_table_name_here

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->type('column')->nullable(false)->change();
    });
}

# Optional:
# public function down()
# {
#     Schema::table('table_name', function ($table) {
#         $table->type('column')->nullable()->change();
#     });
# }
Run Code Online (Sandbox Code Playgroud)

  • 是否有理由在回滚例程中删除整个列?down() 方法应该撤消 up() 方法的逻辑以支持向后和向前滚动迁移。 (9认同)