Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使列在Laravel迁移中不可为空_Php_Sql_Database Migration_Laravel - Fatal编程技术网

Php 使列在Laravel迁移中不可为空

Php 使列在Laravel迁移中不可为空,php,sql,database-migration,laravel,Php,Sql,Database Migration,Laravel,我正在编写一个迁移,以使表中的某些列可以为null。对于down函数,我当然想再次使那些列不可为空。我仔细看了一遍,但找不到一个办法 如果有任何帮助,我们将不胜感激。在Laravel 5之前,没有Laravel原生的方法可以使用schema builder更改现有的表列。您需要为此使用原始查询 但是,从Laravel 5开始,您可以使用: $table->string('foo')->nullable(false)->change(); 在运行上述命令之前,必须具有dbal依

我正在编写一个迁移,以使表
中的某些列可以为null。对于down函数,我当然想再次使那些列
不可为空。我仔细看了一遍,但找不到一个办法


如果有任何帮助,我们将不胜感激。

在Laravel 5之前,没有Laravel原生的方法可以使用schema builder更改现有的表列。您需要为此使用原始查询

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

$table->string('foo')->nullable(false)->change();
在运行上述命令之前,必须具有dbal依赖关系:

composer require doctrine/dbal

从Laravel 5开始,可以在本机上逆转这种情况-只需将false作为参数传递给nullable()

e、 g

首先运行以下命令:

编写器需要条令/dbal

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

php artisan make:migration fix\u which\u table\u name\u此处

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');
#     });
# }

您只需再次声明该列,而无需->null()并使用->更改即可

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

这也是我发现的。模式构建器可以很好地允许更改列定义,但它似乎不支持。我相信还有很多像我一样的人正在使用schema builder修改现有的数据库,而不仅仅是从头开始创建表。Taylor Otwell(Laravel的创建者)6天前(2014-05-09)说:“我仍然坚持我的说法,如果有人能成功且干净地做到这一点,我将合并它。”@Musa显然,您可以将列设置为可空(例如:
$table->string('colmn',255)->nullable()->change();
),但相反的设置似乎不起作用(
$table->string('colmn',255)->change();
),因此您仍然需要使用原始数据库查询。您可以使用nullable()使其可为null,并使用nullable(false)使其在迁移中不可为null。
nullable(false)
在Laravel 5.3中对我不起作用:(这是有效的!由于Laravel的更新,这已成为正确答案。谢谢,尽管我不明白为什么列在默认情况下不可为非空。这通常是最佳做法,这会给代码增加很多噪音。列在默认情况下为非空。海报只是问如何反转已经为空的列。必选先
composer require doctor/dbal
这个问题的最完整答案可以在这里找到:是否有理由在回滚例程中删除整个列?down()方法应该只撤销up()方法的逻辑,以支持前后滚动迁移。
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();
    });
}