DBIx::Class – apuntes

11 Mar

Pequeña guía de referencia para refrescar el uso de esta herramienta.

Definición de datos

La definición de datos ser hace en dos partes: se crean paquetes Perl para cada tabla (‘resultset’)
y un paquete que los engloba en un esquema base (‘schema’).

Definir un tabla (resultsource)

Documentación de referencia en
DBIx::Class::ResultSource.

  1. package Mi::Esquema::MiTabla;
  2. use base qw(DBIx::Class);
  3.  
  4. __PACKAGE__->load_components( qw( Core ) );
  5.  
  6. __PACKAGE__->table('tabla');
  7. __PACKAGE__->add_columns( qw( codigo descripcion ) );
  8. __PACKAGE__->primary_key( q(codigo) );

Crear un esquema de base de datos (schema)

Documentación de referencia en
DBIx::Class::Schema.

  1. package Mi::Esquema;
  2. use base qw(DBIx::Class::Schema);
  3.  
  4. # Cargará todas las definiciones de tablas ('resultset')
  5. # bajo Mi::Esquema::*
  6. __PACKAGE__->load_components( );
  7.  
  8. 1;

Acceso a los datos

El acceso a los datos consiste en leer (buscar y recuperar registros), y
«añadir», «actualizar» y «eliminar» registros, previa conexión con la
fuente de datos.

Conectar con la fuente de datos

Documentación de referencia en Connecting.

  1. use Mi::Esquema;
  2.  
  3. my $esquema = Mi::Esquema->connect('dbi...');

Buscar y/ó leer datos

Documentación de referencia en
DBIx::Class::ResultSet.

  1. # Primero obtenemos un objeto de tipo 'resultset'
  2. # que viene a ser similar a 'prepare' ...
  3. my $result_set = $esquema->resulset('Tabla');
  4.  
  5. # y luego, sobre ese 'resultset' llamamos a métodos concretos,
  6. # bien buscando por la clave primaria como en 'find' y obteniendo una
  7. # instancia del objeto 'Mi::Esquema::Tabla'
  8. my $record = $result_set->find( '00010' );
  9.  
  10. # ó empleando expresiones más complejas para conseguir una
  11. # instancia de 'DBIx::Class::ResultSet' como con 'search'
  12. my $result_set = $result_set->search();