Cách chính xác để thêm cột tùy chỉnh vào bảng người dùng?


7

Tôi đang tìm cách thêm một cột có tên 'được cập nhật' trực tiếp vào bảng người dùng.

API trường và tham gia không phải là một tùy chọn cho tôi trong trường hợp này do các ràng buộc bên ngoài.

Làm cách nào tôi có thể sửa đổi một cách an toàn user_schema để thêm cột 'đã cập nhật' trong mô-đun tùy chỉnh và dọn sạch nó một cách an toàn khi xóa mô-đun?

Dưới đây là cách bố trí cột 'được cập nhật' dựa trên API Schema:

  $field = array(
      'type' => 'int',
      'not null' => TRUE,
      'default' => 0,
      'description' => 'Timestamp for last time user was updated.',
  );

Hiện tại những nỗ lực của tôi sử dụng hook_install không hoạt động như tôi tin là họ nên làm.

Câu trả lời:


5

Có vẻ như tôi đã thiếu hook_schema_alter (). Điều này đã khắc phục sự cố của tôi với drupal_write_record () và lượt xem. Cảm ơn bạn @Clive cho ý kiến của bạn ở đây .

Tổng quan về những gì bạn cần làm:

  • Trong hook_install () bạn cần gọi db_add_field () để thêm trường.
  • Trong hook_schema_alter () bạn sửa đổi lược đồ để các mô-đun khác có thể tương tác với các thay đổi của bạn.
  • Trong hook_uninstall () bạn cần gọi db_drop_field () để dọn dẹp / xóa trường đã thêm của bạn.

Mã thực tế:

Đây là cách tôi thực hiện điều này. Mã dưới đây thuộc về tập tin module.install của bạn.

function hook_install() {
  $field = array(
      'type' => 'int',
      'not null' => TRUE,
      'default' => 0,
      'description' => 'Timestamp for last time user was updated.',
  );
  $index = array(
      'indexes' => array(
          'updated' => array('updated')
      ),
  );
  db_add_field('users', 'updated', $field, $index);
}
function hook_schema_alter(&$schema) {
  $schema['users']['fields']['updated'] = array(
      'type' => 'int',
      'not null' => TRUE,
      'default' => 0,
      'description' => 'Timestamp for last time user was updated.',
  );
}

function hook_uninstall() {
  db_drop_field('users', 'updated');
}

Tôi đã tạo một mymodule.module trống. Và đã thêm một mymodule.info (để nó hiển thị trong danh sách mô-đun) và mymodule.install (sử dụng mã ở trên). Đã thay đổi tất cả "hook_" bằng "mymodule_". Để gỡ cài đặt thay đổi, bạn phải bỏ chọn mô-đun, chuyển đến tab gỡ cài đặt và kiểm tra xem. Gỡ cài đặt theo cách đó sẽ xóa tất cả dữ liệu liên quan đến trường đó.
sksallaj

Tôi có thể nhầm, nhưng nói chung khi gỡ cài đặt một mô-đun, bạn đang tìm cách xóa tất cả dấu vết mô-đun đang được tạo / thêm.
Citricguy

Có, nhưng khi tôi đang cố cập nhật một trường, bạn phải gỡ cài đặt nó và cài đặt lại để áp dụng bản cập nhật. Drupal đơn giản là sẽ không cập nhật mã khi có thay đổi đối với cột trong mã ở trên. Đó là lý do tại sao các thủ tục nhất định phải được xem xét trước khi cập nhật.
sksallaj
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.