Laravel 마이그레이션에서 열을 nullable로 설정하십시오.


126

nullable지금 테이블의 특정 열을 만들기 위해 마이그레이션을 작성하고 있습니다. down 함수의 경우 물론 해당 열을not nullable 다시 . 스키마 빌더 문서를 살펴 보았지만 이를 수행하는 방법을 찾을 수 없었습니다.

어떤 도움을 주시면 감사하겠습니다.


이 질문에 대한 가장 완전한 답변은 다음에서 찾을 수 있습니다. stackoverflow.com/a/32568625/4908847
szaman

답변:


228

Laravel 5 이전에는 스키마 빌더를 사용하여 기존 테이블 열을 변경하는 Laravel 기본 방법이 없었습니다. 이를 위해 원시 쿼리를 사용해야합니다.

그러나 Laravel 5에서는 다음을 사용할 수 있습니다.

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

1
그것도 내가 찾은 것입니다. 스키마 빌더가 지원하지 않는 것처럼 보이는 열 정의 변경을 허용하는 것이 좋습니다. 스키마 빌더를 사용하여 테이블을 처음부터 새로 만드는 것뿐만 아니라 기존 DB를 수정하는 다른 사람들도 많이있을 것입니다.
Sean the Bean

3
Taylor Otwell (Laravel의 창시자)은 6 일 전 (2014-05-09) : "누군가가 성공적이고 깨끗하게 할 수 있다면 합병하겠다는 내 진술을 여전히지지합니다." github.com/laravel/framework/issues/895#issuecomment-42709756
Ryan

3
@Musa 분명히 nullable 열을 설정할 수 $table->string('colmn', 255)->nullable()->change();있지만 (예 :) 그 반대는 작동하지 않는 것 같습니다 ( $table->string('colmn', 255)->change();), 따라서 여전히 원시 db 쿼리를 사용해야합니다
Luís Cruz

5
아래 @MattMcDonald의 답변을 참조하십시오. nullable ()을 사용하여 nullable로 만들고 nullable (false)을 사용하여 마이그레이션에서 Not nullable로 만들 수 있습니다.
ajon

5
nullable(false)Laravel 5.3에서 나를 위해 작동하지 않습니다 :(
Stalinko

38

Laravel 5부터는 이것을 원래대로 되돌릴 수 있습니다. nullable ()에 인수로 false를 전달하기 만하면됩니다.

예 :

$table -> string('foo') -> nullable(false) -> change();

효과가있다! 그래서 이것은 Laravel의 업데이트로 인해 정답이되었습니다.
jlbang

감사합니다. 기본적으로 열이 null이 아닌 이유를 이해하지 못합니다. 일반적으로 모범 사례이며 이는 코드에 많은 노이즈를 추가합니다.
Morgan

1
열은 기본적으로 널이 아닙니다. 포스터는 이미 null 열을 뒤집는 방법을 묻고있었습니다.
Matt McDonald

2

먼저 다음을 실행하십시오.

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
롤백 루틴에서 전체 열을 삭제하는 이유가 있습니까? down () 메서드는 이전 및 앞으로 롤링 마이그레이션을 지원하기 위해 up () 메서드의 논리를 실행 취소해야합니다.
앤드류

1

-> nullable ()없이 열을 다시 선언하고-> 변경을 사용할 수 있습니다.

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();
    });
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.