Не создаётся таблица в БД моим собственным модулем (РЕШЕНО)

Главные вкладки

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 29 января 2009 в 17:04

Добрый день!

Сижу уже битый час, ломаю голову над тем, как определить, почему при подключении моего модуля не создаётся нужная таблица. Мои предыдущие три модуля свои таблицы в базе не создавали, поэтому, я, к сожалению, не знаю, где ловить дебаг.

В общем, имеется такой .module

<?php
// $Id$
/**
 * Implementation of hook_install().
 */

function match_stats_install() {
  drupal_install_schema('match_stats');
}

/**
 * Implementation of hook_schema().
 */

function match_stats_schema() {
  $schema['match_stats'] = array(
    'description'     => t('The base Match Stats table.'),
    'fields'          => array(
      'mid'           => array(
        'description' => t('The {node}.nid (match id) of match to which this {match_stats} entry applies.'),
        'type'        => 'int',
        'not null'    => TRUE,
        'default'     => 0),
      'pid'           => array(
        'description' => t('The {node}.nid (player id) of player profile to which this {match_stats} entry applies.'),
        'type'        => 'int',
        'not null'    => TRUE,
        'default'     => 0),
      'pnum'    => array(
        'description' => t('Shirt number of the player (match_stats.pid) in this match (match_stats.mid)'),
        'type'        => 'int',
        'size'        => 'tiny',
        'not null'    => TRUE,
        'default'     => 0),
      'in'  => array(
        'description' => t('Minute the player went in.'),
        'type'        => 'int',
        'size'        => 'tiny',
        'not null'    => TRUE,
        'default'     => 0),
      'out'  => array(
        'description' => t('Minute the player went out.'),
        'type'        => 'int',
        'size'        => 'tiny',
        'not null'    => TRUE,
        'default'     => 0)),
    'indexes'         => array(
      'mid'           => array('mid'),
      'pid'           => array('pid')),
  );
  return $schema;
}

/*
 * Implementation of hook_uninstall
 */

function match_stats_uninstall() {
  drupal_uninstall_schema('match_stats');
}

match_stats.install сделан руками на базе аналогичного файла от forum_access. Переписываю все файлы модуля в папку /sites/all/modules и включаю его в /admin/build/modules. Всё было бы ничего, но таблица не создаётся — я проверял. Пытался использовать модуль schema в надежде, что тот укажет на ошибку, но он лишь пишет в разделе Missing («Tables in the schema that are not present in the database») название моего модуля и той таблицы, которая не создаётся. На подстранице Describe того же модуля Schema описание моей таблицы есть, но там не указаны индексы (впрочем, может так и должно быть?) Может быть я что-то упустил и нужно предпринять ещё какие-то шаги для создания таблицы?
Подскажите, пожалуйста.
Спасибо.

Комментарии

Аватар пользователя gorr gorr 29 января 2009 в 19:40

Вроде все правильно написано, но если модуль был установлен, а уже потом была добавлена инсталляционная часть, то она не проинсталлируется, нужно анинсталлировать модуль полностью сначала или удалить из таблицы system вручную все, что касается модуля, а затем инсталлировать снова.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 29 января 2009 в 20:46

Спасибо! То есть, как я понимаю, информация о каждом модуле занимает в system одну строку, и мне в данном случае нужно удалить строку, в которую вписан мой модуль, так?

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 29 января 2009 в 23:13

Большое спасибо! Всё оказалось именно так, как Вы и говорили. После того, как я удалил запись о модуле из таблицы system и установил модуль заново, этот модуль создал в моей базе новую таблицу.

Аватар пользователя Serg_M Serg_M 30 января 2009 в 11:31

Ребята, помогите чайнику, нюхом чувствую, проблема такая-же. Поставил модуль tablemanager. Вроде все включил, типа работает но не создает таблицы - No tables present in database.

При установке есть какой-то пункт:
3) If for any reason you do not get a message telling you that the tables have been created okay then manually create the tables from the sql in the tablemanager.install file (you can ignore the updates below the sql).
Небыло никакого сообщения, вернее было стандартное как при установке любого модуля. Заглянул в базу phpmyadmin, есть две строчки - tablemanager и tablemanager_data.

Заглянул по вашим советам в БД таблица system, что-то никакой надписи про tablemanager не нахожу, может куда глубже глядеть надо?

Попутно вопрос, а в Друпале есть Спойлер, чтобы например код программы выглядел более компактно в сообщениях.

Аватар пользователя Serg_M Serg_M 30 января 2009 в 11:34

По моему вопросу - отбой. Поставил модуль на "чистую" систему он и заработал. Кстати, один из методов проверить работоспособность модулей.