에서 새 테이블을 만들 때 hook_schema()
해당 테이블도 추가해야 hook_update_N()
합니까? 아니면 databae-updates가 자동으로 테이블을 추가하도록하는 몇 가지 트릭이나 놓친 것이 있습니까?
hook_update_N () 문서는 새 테이블을 도입하는 것에 대해 설명하지 않지만 다음과 같은 문서는hook_schema()
말합니다 :
이 후크에 의해 선언 된 테이블 은 모듈이 처음 활성화 될 때 자동으로 생성 되고 모듈이 제거 될 때 제거됩니다.
(하이라이트는 내 꺼야)
그렇다면, hook_update_N () 및 hook_schema ()에서 새 테이블에 대한 스키마 정의를 복제하지 않는 것이 가장 좋습니다. 다음과 같이 스키마를 간단히 참조하십시오.
function hook_update_N(&$sandbox) {
$schema = hook_schema();
$name = "foo";
$table = $schema["foo"];
db_create_table($name, $table);
}
작동하는 것처럼 보이지만 사용자가 업데이트를 실행하고 둘 이상의 hook_update_N ()을 실행하면 테이블을 다시 변경하면 실패합니다. 결국 첫 번째 hook_update_N은 이미 올바른 데이터베이스를 설치하고 두 번째 hook_update_M ()은 이미 최신 열을 추가 / 변경 / 변경하려고 시도합니다.
이것을 어떻게 처리합니까?
문서 는 drupal.org/node/150215 를 참조하십시오 . 따라서 기본적으로 모듈을 설치 한 후 새 테이블을 추가하는 것은 hook_update_N을 통하는 것이지만 새 사용자 또는 새로 설치하기 위해 테이블 정의를 hook_schema에 추가 할 수도 있습니다. hook_update_N을 통해 현재 테이블을 업데이트하기 위해 테이블을 변경하면 hook_schema의 변경 사항도 병합합니다.
—
junedkazi
따라서 DRY 위반을 피할 수있는 방법이 없습니다. 동정.
—
berkes
내가 아는 것은 없습니다. 그러나 스키마 정의가있는 작은 함수를 작성하고 두 함수 모두에서 해당 정의를 호출 할 수 있습니다.
—
junedkazi
@berkes 추가 스키마를 반환하는 다른 함수를 정의하고 업데이트 및 설치 후크에서이를 참조 할 수 있습니다.
—
user1359