hook_schema가 데이터베이스 테이블을 작성하지 않습니다.


12

다음 함수는 process_login이라는 사용자 정의 모듈의 일부로 process_login.install에 포함되어 있습니다. 이 모듈은 데이터베이스 테이블을 수동으로 생성 한 경우 작동하지만 당연히 설치시 자동으로 생성 된 테이블을 원합니다.

함수 자체는 모듈 설치시 스키마 오류를 생성하지 않습니다. 그러나 Drupal 7 MySQL 데이터베이스에 데이터베이스 테이블 process_login_register도 작성하지 않습니다.

다른 오류나 사이트 보고서에서보고 된 문제가 없습니다.

나는 그것을 완전히 제거하고 여러 번 다시 설치했습니다. 웹을 광범위하게 검색했으며 Drupal 개발에 관한 두 권의 책을 참고했습니다. 이 기능에 문제가 없습니다 (아래 참조).

참고 : 나는 또한 'id'를 직렬로 정의하려고 시도했지만 동일한 결과를 얻습니다 (즉, 테이블이 생성되지 않음).

아이디어가 부족합니다. 이 기능이 작동하지 않는 이유를 아는 사람이 있습니까?

function process_login_schema(){
  $schema['process_login_register'] = array(
        'description' => 'Register a specific computer with the system.',
        'fields' => array(
                'id' => array(
                    'description' => 'Primary identifier.',
                    'type' => 'int',
                    'unsigned' => TRUE,
                    'size' => 'normal',
                    'not null' => TRUE,
                    'default' => 0,
                ),
                'ip' => array(
                        'description' => "The user's IP address at registration.",
                        'type' => 'varchar',
                        'length' => 32,
                        'not null' => TRUE,
                        'default' => '',
                ),
                'user_agent' => array(
                        'description' => "The user's browser user agent string at registration.",
                        'type' => 'varchar',
                        'length' => 255,
                        'not null' => TRUE,
                        'default' => '',
                ),
        ),
        'primary key' => array('id'),
  );
  return $schema;
}

어떤 Drupal 버전을 사용하고 있습니까?
googletorp

3
함수를 작성한 후 실제로 모듈을 제거했다가 다시 설치 했습니까 (비활성화 및 재 활성화가 아님)?
Clive

Drupal 6은 hook_install에서 drupal_install_schema ()를 호출해야합니다. Drupal 7에서는 명시 적으로 호출하지 않는 것이 좋습니다.
Shoaib Nawaz

위 답변 : Drupal 7. 예. Drupal 7을 사용하고 있으므로 drupal_install_schema ()를 호출하지 않습니다.
user8109

1
@ user8109 활성화 / 비활성화 및 설치 / 제거는 모듈에서 완전히 다른 두 가지입니다. 모듈을 활성화하면 (모듈 페이지에서 확인하고 '제출'을 누름) 모듈 만 활성화하고 호출 hook_enable()합니다. 모듈을 설치 제거한 후에 만 ​​설치 제거를 수행 할 수 있습니다 (제거 탭 또는 디벨 / 다시 설치 사용). 그 후에 모듈에 의해 작성된 모든 테이블이 삭제됩니다. 그런 다음 모듈을 설치하면 hook_install()예상대로 실행됩니다
Clive

답변:


22

사용 drush dre -y [module]후 비활성화, 설치 제거 및 모듈을 다시는-수 있습니다. -y플래그는 언론에이 피, 그것은 더 빨리하게 y를 세 번 입력합니다.


16

모듈을 설치 제거한 후 다시 설치하는 경우에만 사용하고 선언 한 데이터베이스 테이블 hook_schema()이 다시 작성됩니다.

모듈을 제거하려면 다음을 수행해야합니다.

  • 모듈에 표시된 확인란을 선택 취소하십시오

    스크린 샷

  • 구성 저장을 클릭 하십시오

    스크린 샷

  • : 제거 _ 탭을 클릭하십시오

  • 모듈 이름 왼쪽의 확인란을 클릭하십시오
  • 제거 버튼을 클릭하십시오

    스크린 샷

  • 다음 페이지에서 제거 버튼 을 클릭하여 해당 모듈을 제거 할 것임을 확인하십시오.

    스크린 샷

또는 Drush를 설치 한 경우 다음 명령을 사용할 수 있습니다.

drush pm-disable $module
drush pm-install $module
drush en $module

교체 $module정점 사이, 그리고 .module 확장하지 않고, 모듈의 짧은 이름.

모듈을 비활성화 한 다음 다시 활성화하면됩니다. Drupal이 모듈을 포함하는 디렉토리를 삭제 한 경우에도 비활성화 한 다음 다시 활성화하면됩니다.


그것이 가능하면이 사용 drupal_install_schema 및 drupal_uninstall_schema .... 수행하는 drupal.org/node/876250
Hitesh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.