hook_schema không tạo bảng cơ sở dữ liệu


11

Hàm sau được chứa trong process_login.install như một phần của mô-đun tùy chỉnh có tên process_login. Mô-đun hoạt động nếu tôi tự tạo bảng cơ sở dữ liệu, nhưng tự nhiên tôi muốn bảng được tạo tự động khi cài đặt.

Bản thân hàm không tạo ra lỗi lược đồ khi cài đặt mô-đun. Nhưng nó cũng không tạo bảng cơ sở dữ liệu process_login_register trong cơ sở dữ liệu MySQL Drupal 7.

Không có lỗi nào khác tôi có thể thấy hoặc các sự cố được báo cáo bởi Báo cáo Trang web.

Tôi đã gỡ bỏ nó hoàn toàn và cài đặt lại nhiều lần. Tôi đã tìm kiếm trên mạng rất nhiều, và đã tham khảo hai cuốn sách tôi có về sự phát triển của Drupal. Tôi không thể thấy bất cứ điều gì sai với chức năng này (được liệt kê dưới đây).

LƯU Ý: Tôi cũng đã thử xác định 'id' là nối tiếp nhưng nhận được kết quả tương tự (nghĩa là không có bảng nào được tạo).

Tôi đã hết ý tưởng. Có ai biết tại sao chức năng này không hoạt động?

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;
}

Phiên bản Drupal nào bạn đang sử dụng?
googletorp

3
Bạn đã thực sự gỡ cài đặt và cài đặt lại (không chỉ vô hiệu hóa và kích hoạt lại) mô-đun kể từ khi viết chức năng?
Clive

Drupal 6 yêu cầu gọi drupal_install_schema () trong hook_install. Trong Drupal 7, không nên gọi nó một cách rõ ràng.
Shoaib Nawaz

Đáp án trên: Drupal 7. Có. Tôi đang sử dụng Drupal 7 nên không gọi drupal_install_schema ().
dùng8109

1
@ user8109 Kích hoạt / vô hiệu hóa và cài đặt / gỡ cài đặt là hai điều hoàn toàn khác nhau trong các mô-đun. Kích hoạt một mô-đun (kiểm tra nó trong trang mô-đun và nhấn 'Gửi') sẽ chỉ kích hoạt một mô-đun và gọi hook_enable(). Việc cài đặt một mô-đun chỉ có thể được thực hiện sau khi được gỡ cài đặt (sử dụng tab gỡ cài đặt hoặc phát / cài đặt lại), sau đó tất cả các bảng được tạo bởi mô-đun sẽ bị xóa. Sau đó, khi bạn cài đặt mô-đun, hook_install()sẽ chạy như bạn mong đợi
Clive

Câu trả lời:


21

Sử dụng drush dre -y [module]để vô hiệu hóa, gỡ cài đặt và sau đó kích hoạt lại mô-đun. Các -ylá cờ làm cho nó thậm chí còn nhanh hơn, tránh bạn phải bấm y và nhập ba lần.


16

Chỉ khi bạn gỡ cài đặt một mô-đun và sau đó cài đặt lại nó, các bảng cơ sở dữ liệu mà nó sử dụng và khai báo hook_schema()sẽ được tạo lại.

Để gỡ cài đặt một mô-đun, bạn cần:

  • Bỏ chọn hộp kiểm hiển thị cho mô-đun

    ảnh chụp màn hình

  • Nhấp vào Lưu cấu hình

    ảnh chụp màn hình

  • Nhấp vào tab: Uninstall_

  • Nhấp vào hộp kiểm bên trái của tên mô-đun
  • Nhấp vào nút Gỡ cài đặt

    ảnh chụp màn hình

  • Trên trang tiếp theo, xác nhận bạn muốn gỡ cài đặt mô-đun đó bằng cách nhấp vào nút Gỡ cài đặt

    ảnh chụp màn hình

Thay vào đó, nếu bạn đã cài đặt Drush, bạn có thể sử dụng các lệnh sau.

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

Thay thế $modulebằng tên viết tắt của mô-đun, giữa các lời xin lỗi và không có phần mở rộng .module.

Những gì bạn đã làm là vô hiệu hóa mô-đun, và sau đó kích hoạt lại nó. Ngay cả khi bạn đã xóa thư mục chứa mô-đun, đối với Drupal, những gì bạn đã làm chỉ là vô hiệu hóa, và sau đó kích hoạt lại nó.


Có thể làm điều này bằng cách sử dụng drupal_install_schema và drupal_uninstall_schema .... drupal.org/node/876250
Hitesh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.