hook_schema ไม่ได้สร้างตารางฐานข้อมูล


12

ฟังก์ชันต่อไปนี้มีอยู่ใน process_login.install เป็นส่วนหนึ่งของโมดูลที่กำหนดเองชื่อ process_login โมดูลใช้งานได้หากฉันสร้างตารางฐานข้อมูลด้วยตนเอง แต่โดยปกติฉันต้องการให้สร้างตารางโดยอัตโนมัติเมื่อติดตั้ง

ฟังก์ชั่นนั้นไม่ได้สร้างข้อผิดพลาดสกีมาในการติดตั้งโมดูล แต่ไม่สร้างตารางฐานข้อมูล process_login_register ในฐานข้อมูล MySQL Drupal 7

ไม่มีข้อผิดพลาดอื่น ๆ ที่ฉันเห็นหรือรายงานปัญหาจากรายงานเว็บไซต์

ฉันได้ลบมันออกอย่างสมบูรณ์และติดตั้งใหม่หลายครั้ง ฉันค้นหาเว็บอย่างกว้างขวางและอ่านหนังสือสองเล่มที่ฉันมีเกี่ยวกับการพัฒนาของ 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
คุณถอนการติดตั้งและติดตั้งใหม่จริง ๆ (ไม่ใช่แค่ปิดการใช้งานและเปิดใช้งานใหม่) โมดูลตั้งแต่เขียนฟังก์ชั่น?
ไคลฟ์

Drupal 6 ต้องการเรียก drupal_install_schema () ใน hook_install ใน Drupal 7 ไม่แนะนำให้เรียกมันอย่างชัดเจน
Shoaib Nawaz

คำตอบข้างต้น: Drupal 7. ใช่ ฉันกำลังใช้ Drupal 7 ดังนั้นไม่ต้องเรียก drupal_install_schema ()
user8109

1
@ user8109 การเปิดใช้งาน / ปิดใช้งานและการติดตั้ง / ถอนการติดตั้งเป็นสองสิ่งที่แตกต่างอย่างสิ้นเชิงในโมดูล การเปิดใช้งานโมดูล (ตรวจสอบในหน้าโมดูลและกด 'ส่ง') จะเปิดใช้งานโมดูลและเรียกใช้hook_enable()เท่านั้น การติดตั้งโมดูลสามารถทำได้หลังจากถอนการติดตั้งแล้ว (ใช้แท็บถอนการติดตั้งหรือ devel / ติดตั้งใหม่) หลังจากนั้นตารางทั้งหมดที่สร้างขึ้นโดยโมดูลจะถูกลบ เมื่อคุณติดตั้งโมดูลแล้วhook_install()จะทำงานตามที่คุณคาดหวัง
Clive

คำตอบ:


22

ใช้drush dre -y [module]สิ่งที่ปิดใช้งานถอนการติดตั้งแล้วเปิดใช้งานโมดูลอีกครั้ง -yธงทำให้มันทำงานได้เร็วขึ้นและหลีกเลี่ยงการที่คุณต้องกดYและป้อนสามครั้ง


16

เฉพาะในกรณีที่คุณถอนการติดตั้งโมดูลและติดตั้งใหม่ในภายหลังตารางฐานข้อมูลที่ใช้และประกาศด้วยhook_schema()จะถูกสร้างขึ้นใหม่

ในการถอนการติดตั้งโมดูลคุณต้อง:

  • ยกเลิกการเลือกช่องทำเครื่องหมายที่แสดงสำหรับโมดูล

    ภาพหน้าจอ

  • คลิกที่บันทึกการกำหนดค่า

    ภาพหน้าจอ

  • คลิกที่แท็บ: Uninstall_

  • คลิกที่ช่องทำเครื่องหมายทางด้านซ้ายของชื่อโมดูล
  • คลิกที่ปุ่มถอนการติดตั้ง

    ภาพหน้าจอ

  • ในหน้าถัดไปยืนยันว่าคุณต้องการถอนการติดตั้งโมดูลนั้นโดยคลิกที่ปุ่มถอนการติดตั้ง

    ภาพหน้าจอ

หากคุณติดตั้ง Drush คุณสามารถใช้คำสั่งต่อไปนี้

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

แทนที่$moduleด้วยชื่อย่อของโมดูลระหว่าง apices และไม่มีส่วนขยาย. โมดูล

สิ่งที่คุณทำคือปิดใช้งานโมดูลและเปิดใช้งานอีกครั้ง แม้ว่าคุณจะลบไดเรกทอรีที่มีโมดูลสำหรับ Drupal สิ่งที่คุณทำก็แค่ปิดการใช้งานและเปิดใช้งานมันอีกครั้ง


เป็นไปได้ไหมที่จะใช้สิ่งนี้โดยใช้ drupal_install_schema และ drupal_uninstall_schema .... drupal.org/node/876250
Hitesh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.