Hero

Como crear tablas para nuestros módulos personalizados en Drupal 7

Marzo 17, 2014

omers
Drupal
Desarrollo de Modulos

Durante el desarrollo de módulos tenemos la necesidad de crear nuevas tablas en la base de datos para alguna de las funcionalidades que estemos realizando, en este post vamos a mostrar la forma de como podemos hacerlo.

  1. Creando nuestro Archivo .install

Como primer paso tendremos que crear un nuevo archivo llamado mi_modulo.install, así como creamos el .info o el .module

  1. Agregando nuestra tabla con sus atributos

Una vez creado nuestro archivo .install es momento de crear nuestra tabla con sus respectivos atributos para esto haremos uso del hook_schema.

function mi_modulo_schema() {
  $schema['mi_modulo_table'] = array(
    'description' => 'This is a table for my custom module',
    'fields' => array(
      'id' => array(
        'description' => 'The primary identifier for my table.',
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE
      ),
      'foreign_id' => array(
        'description' => 'The foreign key for my table.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' =>0
      ),
      'varchar_attribute' => array(
        'description' => 'Varchar Attribute.',
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => ''
      ),
      'int_attribute' => array(
        'description' => 'Int Attribute.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 1
      ),
    ),
    'indexes' => array(
      'custom_table_varchar_attribute' => array('varchar_attribute'),
    ),
    'foreign keys' => array(
      'custom_table_foreign_key' => array(
        'table' => 'my_other_table',
        'columns' => array('foreign_id' => 'foreign_id'),
      ),
    ),
    'primary key' => array('id'),
  );
  return $schema;
}

En el codigo anterior podremos ver un par de cosas interesantes que son de suma importancia la variable $schema tiene como llave el nombre de nuestra tabla seguido de algunas propiedades como lo son los fields que es un arreglo asociativo en el cual definimos los campos de nuestra tabla,el nombre del campo, el tipo de campo, directivas para evitar nulos, valor por defecto, etc.

Podemos apreciar otras propiedades como lo son indexes la cual nos permite asignar los índices para nuestra tabla, foreign keys para nuestra llave foránea y primary key para nuestra llave primaria. Aunque en la implementación actual de PDO las llaves foráneas solo son informativas y estas no serán creadas.

  1. Activar Nuestro Módulo

Cuando nuestro modulo lo activamos por primera vez, nuestra tabla se insertara a la base de datos de manera automática, podemos hacer uso del hook_install para precargar algunos valores por defecto a la hora de instalar nuestro módulo.

function mi_modulo_install() {
  db_insert('mi_modulo_table')
    ->fields(array(
      'id' => 1,
      'foreign_id' => 2,
      'varchar_attribute' => 'dummy string',
      'int_attribute' => 1132,
  ))
  ->execute();
}

Con esto le hemos dado a nuestro módulo la capacidad de crear tablas en la base de datos y precargar algunos valores.

Mi Base de Datos

  1. Prevenir comportamientos indeseables

Puede pasar que tengamos que realizar pruebas o por alguna razón tengamos que desactivar el módulo, esto no significa que nuestra tabla desparecerá, solo bastara volver a activarlo para seguir trabajando con nuestra tabla tal como la dejamos, cuando tengamos la intención de quitar completamente el módulo, tendremos que llamar a la función drupal_uninstall_schema pasándole como parámetro el nombre de nuestro modulo, dentro del hook_uninstall.

function mi_modulo_uninstall() {
   drupal_uninstall_schema('mi_modulo');
}
  1. Modificando los atributos de mi Tabla

Otro caso con el que podemos enfrentarnos es cuando tenemos la necesidad de modifcar o tal vez agregar nuevos campos, ¿Como podemos lograrlo?, para profundizar mas sobre este tema en especifico te invito a darle un vistazo a la entrada de blog “Como modificar el esquema de una Base de Datos en Drupal 7”.

De esta manera es como podemos hacer que nuestros modulos personalizados puedan crear tablas adicionales en la base de datos para alguna funcionalidad especifica que necesitemos realizar.

Espero que les sea útil y de su agrado .

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.