在Laravel迁移中使列不可为空

时间:2012-12-23 19:03:35

标签: php sql database-migration laravel

我正在编写迁移,以便立即在表nullable中创建某些列。对于向下功能,我当然希望再次创建这些列not nullable。我浏览了schema builder docs,但看不到这样做的方法。

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:172)

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

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

$table->...->nullable(false)->change();

答案 1 :(得分:34)

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

e.g。

sum(val for val in l1 if isinstance(val, numbers.Number))

答案 2 :(得分:3)

您可以再次声明该列而无需-> 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();
    });
}

答案 3 :(得分:0)

首先运行:

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();
    });
}

public function down()
{
    Schema::table('table_name', function ($table) {
        $table->dropColumn('column');
    });
}

答案 4 :(得分:-8)

以下信息适用于 SQL
首先使用以下代码

UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL

而不是运行此代码

ALTER TABLE [Table] MODIFY [Column] INTEGER NOT NULL