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