добавление таблицы с помощью hook_schema () - PullRequest
4 голосов
/ 29 декабря 2010

Планирую добавить таблицу с помощью hook_schema.Я определил схему и вызываю ее в своем модуле.Однако схема не создается.Куда я иду не так?У меня есть следующий код в моем файле sample2.install

    function sample2_schema(){
    $schema['mytable1'] = array(
    'description' => t('My table description'),
    'fields' => array(
     'mycolumn1' => array(
      'description' => t('My unique identifier'),
      'type' => 'serial',
      'unsigned' => true,
      'not null' => true,
      ), 
     'myvarchar' => array(
       'description' => t('My varchar'),
       'type' => 'varchar',
       'length' => 32,
       'not null' => true,
      ),
      'mytimestamp' => array(
        'description' => t('My timestamp'),
        'type' => 'int',
        'not null' => true,
      ),
    ),
    'indexes' => array(
      'myvarchar' => array('myvarchar'),
    ),
    'primary key' => array('mycolumn1'),
    'unique keys' => array(
       'mycolumn1' => array('mycolumn1'),
    ),
    );

    return $schema;
    }
      function sample2_install(){
    drupal_install_schema('sample2');
       }
      function sample2_uninstall(){
    drupal_uninstall_schema('sample2');
        }

Для его вызова я использую следующий код в моем файле sample2.module.

        $record = (object) NULL;
    $record->myvarchar = 'blah';
    $record->mytimestamp = strtotime('now');
    drupal_write_record('mytable1',$record);

Эта таблица не создается.

Ответы [ 3 ]

6 голосов
/ 29 декабря 2010

Если модуль sample2 существовал и был включен до добавления функций sample2_schema() и sample2_install(), его необходимо удалить (а не просто отключить), а затем снова установить / включить. В противном случае Drupal не будет использовать ваш hook_install(). Другое решение заключается в установке схемы в hook_update_N() реализации. Затем используйте u pdate.php или drush updatedb для запуска кода обновления.

function sample2_update_6001() {
  drupal_install_schema('sample2');
}
1 голос
/ 19 октября 2011

Чтобы добавить новую таблицу в существующую схему модуля базы данных, вы можете сделать это:

 /**
 * Add generic API transaction log table.
 */
function commerce_paydollar_update_7004(&$sandbox){
  // Get schema definition for this module
  $schema = commerce_paydollar_schema();
  // Create a selected table from the schema definition  
  db_create_table('commerce_paydollar_api_txn', $schema['commerce_paydollar_api_txn']);
  $sandbox['#finished'] = TRUE;
}
0 голосов
/ 29 декабря 2010

См. Еще один очень похожий вопрос: Файл установки модуля Drupal 6 не создает таблицы в базе данных .

Во второй части вашего вопроса вы говорите о «вызове» таблицы. Прежде чем пытаться что-то записать в таблицу из модуля, я бы предложил подключиться к вашей базе данных и проверить, была ли таблица создана успешно.

Удаление / переустановка вашего модуля вызовет создание схемы в установочном файле. Если синтаксис правильный, ваша таблица будет создана.

Если вы обнаружите, что ваша таблица не создается, и считаете, что это проблема синтаксиса, я бы предложил упростить ваш код, сначала попытавшись добавить только один столбец, затем остальные столбцы и, наконец, индексы. Вы можете установить / удалить между каждым из этих шагов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...