تعریف جداول پایگاه داده مربوط به ماژول توسط hook_schema

هوک hook_schema در فایل install تعریف می‌شود. چند نکته در مورد آن وجوذ دارد:

ساختار کلی

/**
 * Implementation of hook_schema().
 */
function live_score_schema() {
  $schema['cache_live_score'] = drupal_get_schema_unprocessed('system', 'cache');
  $schema['live_score'] = array(
    'description' => 'Keep processed match data',
    'fields' => array(
      'lid' => array(
        'description' => 'Live score ID',
        'type' => 'serial',
        'not null' => TRUE,
      ),
      ...
    ),
    'primary key' => array('lid'),
  );
  return $schema;
}

تعریف جداول مربوط به catch


$schema['cache_live_score'] = drupal_get_schema_unprocessed('system', 'cache');

چند نکته

  • این هوک هنگام فعال‌سازی ماژول برای اولین بار به صورت خودکار اجرا می‌شود. در صورت غیر فعال کردن ماژول جداولی که در این هوک تعریف شده‌اند حذف نخواهند شد مگر آنکه در hook_uninstall صراحتا آنها را حذف کنیم. نسخه (version) مربوط به schema در جدول system ثبت می‌شود. برخورد دروپال این است که حتی وقتی ماژول غیر فعال است schema مربوط به آن وجود دارد. لذا برای اجرای مجدد این هوک باید ردیف مربوط به ماژول مربوطه از جدول system حذف شود (به صورت دستی).
  • در صورت اعمال تغییرات در schema و اعمال دستی این تغییرات در پایگاه داده (مثلا اضافه کردن ستون به یک جدول)، لازم است ردیف مربوط به schema را از جدول catch نیز حذف کنیم تا دوباره مورد پردازش قرار گیرد. (به صورت دستی)
  • در تغییر نسخه ماژول باید تغییرات ساختار پایگاه داده بین نسخه ها توسط hook های UPDATE به دروپال اعلام شود.

افزودن نظر جدید