Laravel:외래 키 제약 조건 변경

2616 단어 sqllaravelprogramming
laravel 마이그레이션 파일을 생성하는 동안 실수를 했습니다.

외래 키에 추가ON DELETE cascade하고 열을 null로 만들 수 없습니다. 동료 개발자의 다른 커밋과 병합되는 위치에 이미 배포되었습니다.

이제 사용자는 매우 성가신 카테고리를 선택하지 않고 게시물을 저장할 수 없습니다 ...

이제 외래 키 제약 조건을 변경해야 합니다.
먼저 SQL 쿼리를 만들어 봅시다.

먼저 현재 외래 키를 제거해야 합니다.

따라서 이를 제거하려면 먼저 외래 키의 이름을 가져와야 합니다. 외래 키를 만들려면 {table_name}_{column_name}_foreign가 필요합니다.
내 마이그레이션에서 볼 수 있습니다

Schema::create('posts', function (Blueprint $table) {
    $table->increments('id');`
    $table->integer('category_id')->unsigned();`
    $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
});


여기에서 외래 키 이름이 posts_category_id_foreign임을 알았습니다.

이제 외래 키와 열을 제거할 수 있습니다. 다음은 외래 키를 삭제하는 쿼리입니다.

ALTER TABLE posts DROP FOREIGN KEY posts_category_id_foreign;
ALTER TABLE posts DROP COLUMN category_id;


그런 다음 새로운 nullable 열과 키를 만들 수 있습니다.

ALTER TABLE posts ADD COLUMN category_id NULL;
ALTER TABLE posts ADD FOREIGN KEY (key) REFERENCES categories(id) ON DELETE SET NULL;


이제 마이그레이션에서 이것을 변환하는 방법을 살펴보겠습니다.
  • 먼저 마이그레이션 파일을 생성합니다.

  • php artisan make:migration update_posts_category_foreign
    


  • up 메서드에서 먼저 현재 외래 키와 열을 제거할 수 있습니다.

  • Schema::table('posts', function (Blueprint $table) {
      $table->dropForeign('posts_category_id_foreign');
      $table->dropColumn('category_id');
    });
    


  • 이제 열이 제거되었으므로 null 허용 열과 새 외래 키를 추가할 수 있습니다.

  • Schema::table('posts', function (Blueprint $table) {
        $table->integer('category_id')->unsigned()->nullable();
        $table->foreign('category_id')->references('id')->on('posts')->onDelete('set null');
    });
    


    그게 다야! down 메서드에서는 이를 뒤집을 뿐입니다.

    Schema::table('posts', function (Blueprint $table) {
        $table->dropForeign('posts_category_id_foreign');
        $table->foreign('category_id')->references('id')->on('posts')->onDelete('cascade');
    });
    


    그것이 내가 실수에서 벗어난 방법입니다.
    또 보자! 즐거운 코딩하세요!

    좋은 웹페이지 즐겨찾기