170

我现在正在编写迁移以在表中创建某些列nullable。对于向下功能,我当然想not nullable再次制作这些列。我查看了架构生成器文档,但看不到这样做的方法。

任何帮助,将不胜感激。

4

5 回答 5

292

在 Laravel 5 之前,没有 Laravel 原生的方式来使用模式构建器更改现有的表列。您需要为此使用原始查询。

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

$table->string('foo')->nullable(false)->change();

在运行上述命令之前,您必须具有 dbal 依赖项:

composer require doctrine/dbal
于 2012-12-24T00:36:17.173 回答
51

从 Laravel 5 开始,可以通过将 false 作为参数传递给nullable.

$table->string('foo')->nullable(false)->change();
于 2016-01-11T18:18:32.057 回答
9

首先运行这个:

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();
#     });
# }
于 2018-07-30T20:56:30.460 回答
4

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

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

public function down()
{
    Schema::table('table_name', function ($table) {
        $table->type('column')->nullable()->change();
    });
}
于 2020-01-29T21:36:57.243 回答
2

在 laravel 8 中,您只需输入:“->nullable()”

$table->string('name')->nullable(); 
于 2021-08-23T13:40:28.593 回答