有什么方法可以默认定义可空字段,而无需在迁移中添加nullable()

时间:2019-02-01 11:46:14

标签: laravel migration nullable

我想在迁移文件中设置可为空的字段,而不使用AppServiceProvider引导中的-> nullable():

 public function boot()
   {
      \Schema::defaultStringLength('191');
      \Schema::defaultNull('Yes');
   }

所以,我可以在迁移文件中使用

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('email')->unique();
    $table->string('password');
    $table->string('firstname');  // default nullable
    $table->string('lastname'); // default nullable
    $table->timestamps();
});

代替

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('email')->unique();
    $table->string('password');
    $table->string('firstname')->nullable();
    $table->string('lastname')->nullable();
    $table->timestamps();
});

2 个答案:

答案 0 :(得分:0)

可为空值是一个约束,可以尝试默认(0)或默认( '')。

npm install

答案 1 :(得分:0)

至少在Laravel 5.5.44中进行测试Blueprint类是Macroable。这意味着您可以添加aditional的功能的类。

这意味着您可以执行以下操作:

此添加到boot()

AppServiceProvider方法
use Illuminate\Database\Schema\Blueprint;
...

Blueprint::macro('nullableString', function(string $column, $length = null){ .              
    return $this->string($column, $length)->nullable();
});

然后可以使用nullableString()在迁移设置如下:

...
$table->nullableString('firstname');  // default nullable
$table->nullableString('lastname'); // default nullable
...

干杯!

  

PS:在许多情况下,我会避免过度自动执行此操作。迁移是假设,以帮助你有你的数据库的支持文档架构变化的长远之计。但是,如果你能管理它,为什么不呢?