Khi bạn tạo một bảng mới hook_schema()
, bảng đó có nên được thêm vào hook_update_N()
không? Hoặc có một số mẹo, hoặc một cái gì đó tôi đã bỏ lỡ, để cập nhật databae tự động thêm bảng?
Tài liệu của hook_update_N () không giải thích bất cứ điều gì về việc giới thiệu các bảng mới, trong khi tài liệuhook_schema()
nói:
Các bảng được khai báo bởi hook này sẽ được tạo tự động khi mô-đun được bật lần đầu và được gỡ bỏ khi mô-đun được gỡ cài đặt.
(Nổi bật là của tôi)
Và nếu vậy, làm thế nào để tránh trùng lặp các định nghĩa lược đồ cho bảng mới trong cả hook_update_N () và hook_schema (). Chỉ cần tham khảo lược đồ như sau:
function hook_update_N(&$sandbox) {
$schema = hook_schema();
$name = "foo";
$table = $schema["foo"];
db_create_table($name, $table);
}
Có vẻ hoạt động, nhưng khi thay đổi bảng một lần nữa, sẽ thất bại nếu người dùng chạy các bản cập nhật và được chạy hai hoặc nhiều hook_update_N () s. Sau tất cả: hook_update_N đầu tiên sau đó sẽ cài đặt cơ sở dữ liệu chính xác và hook_update_M () thứ hai sẽ cố gắng thêm / thay đổi / thay đổi các cột đã được cập nhật.
Làm thế nào để bạn đối phó với điều này?