Есть ли способ определить пустые поля по умолчанию без добавления nullable () в миграции - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу установить пустые поля в файле миграции без использования -> nullable () из загрузки AppServiceProvider, например:

 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 голосов
/ 01 февраля 2019

По крайней мере, тестирование в Laravel 5.5.44. Класс Blueprint является Macroable.Это означает, что вы можете добавить дополнительные функции в класс.

Это означает, что вы можете сделать что-то вроде этого:

Добавьте это к методу 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: я бы не стал делать это автоматически во многихслучаев.Предполагается, что миграция поможет вам получить документацию поддержки изменений схемы базы данных в долгосрочной перспективе.Но если ты справишься, почему бы и нет?

0 голосов
/ 01 февраля 2019

Nullable - это ограничение, вы можете попробовать default (0) или default ('').

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