SlideShare una empresa de Scribd logo
1 de 20
DBIx::Class

All your databases are belong to us
Conceptos
• ORM
 – Object-Relational Mapper
Mundo Relacional <-> Mundo OO
• Tabla: Un conjunto de     • Clase: Define los datos
  elementos con las           (propiedades) y
  mismas propiedades,         métodos que tendrá un
  identificados por una       objeto
  clave.                    • Objeto: Instancia de
• Fila: un elemento único     una clase.
  del conjunto
Mundo Relacional <-> Mundo OO
• Tabla: Un conjunto de     • Clase: Define los datos
  elementos con las           (propiedades) y
  mismas propiedades,         métodos que tendrá un
  identificados por una       objeto
  clave.                    • Objeto: Instancia de
• Fila: un elemento único     una clase.
  del conjunto
Definiciones
DBIx::Class no es DBIx
• ResultSet: Conjunto de Rows
• ResultSource: Definición de un ResultSet
• Row: Un objeto que representa una fila
• Schema: Una base de datos
ResultSet
        $schema->resultset(‘Users’)



Users
ResultSet
  $schema->resultset(‘Users’)->search(, ‘id’ => , ‘>’ => 7 - -)



Users
ResultSet
        $schema->resultset(‘Users’)->search(, ‘id’ => 8 -)



Users
Iterando un Resultset
my $rs = $schema->resultset(“Users”)-
  >search(…)
while (my $row = $rs->next){
  say $row->FirstName
}
Iterando un Resultset
while (my $row = $schema->resultset(“Users”)-
  >next){
  say $row->FirstName
}

Bucle infinito!!!
SQL::Abstract
• Modulo independiente
   – Mantenido por los autores de DBIx::Class
• Convierte estructuras de datos en consultas
campo => 6
campo => , ‘>=‘ => 7 -
campo => , ‘LIKE’ => ‘K%’ -
campo => [ 6,7,8 ]
-or => [ { campo1 => 6 }, { campo2 => 7 } ]
-and => [ { cond1 }, { cond2 }, { cond3 } ]
campo => { -in => [ 2,5,6 ] }
campo => { -between => [1, 6] }
campo => undef
SQL::Abstract
• Más potencia escondida en el segundo parámetro de search
, ‘select’ => * ‘name’, ’TO_LOWER(surname)’ +
  ‘as’ => * ‘name’, ‘lower_surname’ +
  ‘order_by’ => ‘name’
}

{ join => ‘relation_name’
  prefetch => ‘relation_name’
}

, ‘select’ => * ‘name’, , ‘COUNT’ => ‘id’ - +
  ‘as’ => * ‘name’, ‘count’ +,
   group_by => * ‘name’ +
}
metodos *_rs
• En contexto de lista search devuelve una lista
  de rows
• search_rs fuerza devolver un resultset
  – En Template::Toolkit todo se evalua en contexto
    de lista 
foreach my $row ($rs->search({})){
  say $row->FirstName
}
Chaining de ResultSets
$rs = $rs->search(, “age” => , “>=“ => 40 - -);
$rs = $rs->search(, “name” => , “LIKE” => “J%” -
  });
….

my $obj = $rs->first;
Find
$row = $rs->find(, “id” => 3 -);

__PACKAGE__->add_unique_constraint(
  “dni” => * ‘dni’ +
  );
$row = $rs->find( , ‘dni’ => ‘XXX’ -, , ‘key’ => ‘dni’
  });
Insert, Update, Delete
•   Insert
     –   $o = $rs->resultset(‘Users’)->create
     –   $o->FirstName(“Val1”);
     –   $o->SurName(“Val2”);
     –   $o->insert;
•   Update
     – $o = $rs->find(, ‘id’ => 8 -);
     – $o->FirstName(“Little Bobby”);
     – $o->update

     – $rs->search(, ‘age’ => ’0’ -)->update(, ‘age’ => 1 -);
     – $rs->search(, ‘age’ => ’0’ -)->update_all(, ‘age’ => 1 -);

•   Delete
     – $o = $rs->find(, ‘id’ => 8 -);
     – $o->delete

     – $rs->search(, ‘age’ => ’0’ -)->delete;
     – ->search(, ‘age’ => ’0’ -)->delete_all;
Plugins útiles
• DBIx::Class::InflateColumn::
  – DateTime
  – Serializer
  – Object::Enum
  – Path::Class
  – IP
  – File
  – ….
• DBIx::Class::Tree
Referencia
• DBIx::Class::Manual::Cookbook
• DBIx::Class::Manual::FAQ
Ejercicio
User




                   Event




Role
Ejercicio(s)
git clone
    https://github.com/diegok/dbic.curs.barcelona.pm.git
Inicializar base de datos
    prove -lv t/*
   - que pase los tests
Script que popula una base de datos
 - 3 usuarios
 - 5 eventos
 - apunta a 2 usuarios a 4 eventos
Script que saca un listado de:
    - Los usuarios
    - Los eventos a los que no van a asistir usuarios

Más contenido relacionado

La actualidad más candente

Formularios en Drupal 8
Formularios en Drupal 8Formularios en Drupal 8
Formularios en Drupal 8Atenea tech
 
Creación de bases de datos en SQL Server
Creación de bases de datos en SQL ServerCreación de bases de datos en SQL Server
Creación de bases de datos en SQL Serverjose C Leal
 
Workshop Camp México 09 - Introducción a Ruby
Workshop Camp México 09 - Introducción a RubyWorkshop Camp México 09 - Introducción a Ruby
Workshop Camp México 09 - Introducción a RubyEdgar Suarez
 
Creación indices y constraints en bases de datos de sql server
Creación indices y constraints en bases de datos de sql serverCreación indices y constraints en bases de datos de sql server
Creación indices y constraints en bases de datos de sql serverBrandon Ruiz
 
deber base de datsos sql
deber base de datsos sqldeber base de datsos sql
deber base de datsos sqlGeovannyYungan
 
Creación de funciones postgre sql
Creación de funciones postgre sqlCreación de funciones postgre sql
Creación de funciones postgre sqlEddie Malca
 
Serializacion de objetos
Serializacion de objetosSerializacion de objetos
Serializacion de objetosstphnxxx
 
jQuery
jQueryjQuery
jQueryCoya14
 

La actualidad más candente (10)

Jquery parte 1
Jquery parte 1Jquery parte 1
Jquery parte 1
 
Formularios en Drupal 8
Formularios en Drupal 8Formularios en Drupal 8
Formularios en Drupal 8
 
COMANDOS DDL
COMANDOS DDLCOMANDOS DDL
COMANDOS DDL
 
Creación de bases de datos en SQL Server
Creación de bases de datos en SQL ServerCreación de bases de datos en SQL Server
Creación de bases de datos en SQL Server
 
Workshop Camp México 09 - Introducción a Ruby
Workshop Camp México 09 - Introducción a RubyWorkshop Camp México 09 - Introducción a Ruby
Workshop Camp México 09 - Introducción a Ruby
 
Creación indices y constraints en bases de datos de sql server
Creación indices y constraints en bases de datos de sql serverCreación indices y constraints en bases de datos de sql server
Creación indices y constraints en bases de datos de sql server
 
deber base de datsos sql
deber base de datsos sqldeber base de datsos sql
deber base de datsos sql
 
Creación de funciones postgre sql
Creación de funciones postgre sqlCreación de funciones postgre sql
Creación de funciones postgre sql
 
Serializacion de objetos
Serializacion de objetosSerializacion de objetos
Serializacion de objetos
 
jQuery
jQueryjQuery
jQuery
 

Destacado

Infinity
InfinityInfinity
Infinityjs229
 
How to use photoshop
How to use photoshopHow to use photoshop
How to use photoshopkamar95
 
Работа в компании "АйТи Капитал"
Работа в компании "АйТи Капитал"Работа в компании "АйТи Капитал"
Работа в компании "АйТи Капитал"itcapital
 
Feedback from the first versions of my music
Feedback from the first versions of my musicFeedback from the first versions of my music
Feedback from the first versions of my musickamar95
 
Results for my first drafts
Results for my first draftsResults for my first drafts
Results for my first draftskamar95
 
Pictures i have used in my magazine 2
Pictures i have used in my magazine 2Pictures i have used in my magazine 2
Pictures i have used in my magazine 2kamar95
 
Garm2 raton sin pilas
Garm2 raton sin pilasGarm2 raton sin pilas
Garm2 raton sin pilasjaiip
 
My fist drafts presnetation
My fist drafts presnetationMy fist drafts presnetation
My fist drafts presnetationkamar95
 
Daniel & Ernesto's presentation
Daniel & Ernesto's presentationDaniel & Ernesto's presentation
Daniel & Ernesto's presentationErnesto Sepulveda
 
Questionnaire results
Questionnaire resultsQuestionnaire results
Questionnaire resultskamar95
 
Rancangan Pengajaran Harian Matematik (Mikropengajaran)
Rancangan Pengajaran Harian Matematik (Mikropengajaran)Rancangan Pengajaran Harian Matematik (Mikropengajaran)
Rancangan Pengajaran Harian Matematik (Mikropengajaran)jocelynlly
 

Destacado (20)

NRD: Nagios Result Distributor
NRD: Nagios Result DistributorNRD: Nagios Result Distributor
NRD: Nagios Result Distributor
 
Infinity
InfinityInfinity
Infinity
 
Arxaia b gymn
Arxaia b gymnArxaia b gymn
Arxaia b gymn
 
Pptplan morgenjuli2011 pptbehandelcoordinatoren
Pptplan morgenjuli2011 pptbehandelcoordinatorenPptplan morgenjuli2011 pptbehandelcoordinatoren
Pptplan morgenjuli2011 pptbehandelcoordinatoren
 
jul-ago-00
jul-ago-00jul-ago-00
jul-ago-00
 
Polifonia.4.12
Polifonia.4.12Polifonia.4.12
Polifonia.4.12
 
How to use photoshop
How to use photoshopHow to use photoshop
How to use photoshop
 
Работа в компании "АйТи Капитал"
Работа в компании "АйТи Капитал"Работа в компании "АйТи Капитал"
Работа в компании "АйТи Капитал"
 
Polifonia_6.18
Polifonia_6.18Polifonia_6.18
Polifonia_6.18
 
Feedback from the first versions of my music
Feedback from the first versions of my musicFeedback from the first versions of my music
Feedback from the first versions of my music
 
Web2 0
Web2 0Web2 0
Web2 0
 
Results for my first drafts
Results for my first draftsResults for my first drafts
Results for my first drafts
 
Pictures i have used in my magazine 2
Pictures i have used in my magazine 2Pictures i have used in my magazine 2
Pictures i have used in my magazine 2
 
introduccion
introduccionintroduccion
introduccion
 
Garm2 raton sin pilas
Garm2 raton sin pilasGarm2 raton sin pilas
Garm2 raton sin pilas
 
Polifonia_6.16
Polifonia_6.16Polifonia_6.16
Polifonia_6.16
 
My fist drafts presnetation
My fist drafts presnetationMy fist drafts presnetation
My fist drafts presnetation
 
Daniel & Ernesto's presentation
Daniel & Ernesto's presentationDaniel & Ernesto's presentation
Daniel & Ernesto's presentation
 
Questionnaire results
Questionnaire resultsQuestionnaire results
Questionnaire results
 
Rancangan Pengajaran Harian Matematik (Mikropengajaran)
Rancangan Pengajaran Harian Matematik (Mikropengajaran)Rancangan Pengajaran Harian Matematik (Mikropengajaran)
Rancangan Pengajaran Harian Matematik (Mikropengajaran)
 

Similar a DBIx::Class (20)

No-SQL Databases
No-SQL DatabasesNo-SQL Databases
No-SQL Databases
 
Base de datos
Base de datosBase de datos
Base de datos
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
BigData - NoSQL
BigData -  NoSQL BigData -  NoSQL
BigData - NoSQL
 
Curso integración Web Semántica
Curso integración Web Semántica Curso integración Web Semántica
Curso integración Web Semántica
 
Introducción a DJango
Introducción a DJangoIntroducción a DJango
Introducción a DJango
 
Gustavo php
Gustavo phpGustavo php
Gustavo php
 
Django y Python para todos
Django y Python para todosDjango y Python para todos
Django y Python para todos
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
 
Sesión 12 -Diseño de BD_Ciclo_3.pptx
Sesión 12 -Diseño de BD_Ciclo_3.pptxSesión 12 -Diseño de BD_Ciclo_3.pptx
Sesión 12 -Diseño de BD_Ciclo_3.pptx
 
Mallorca MUG: MapReduce y Aggregation Framework
Mallorca MUG: MapReduce y Aggregation FrameworkMallorca MUG: MapReduce y Aggregation Framework
Mallorca MUG: MapReduce y Aggregation Framework
 
Guia N5 Proyectos Web Consultas Php Y My Sql
Guia N5   Proyectos Web   Consultas Php Y My SqlGuia N5   Proyectos Web   Consultas Php Y My Sql
Guia N5 Proyectos Web Consultas Php Y My Sql
 
Seminario mongo db springdata 10-11-2011
Seminario mongo db springdata 10-11-2011Seminario mongo db springdata 10-11-2011
Seminario mongo db springdata 10-11-2011
 
Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1
 
Entidades en drupal 8
Entidades en drupal 8Entidades en drupal 8
Entidades en drupal 8
 
Manual de java_2
Manual de java_2Manual de java_2
Manual de java_2
 
manual 9
manual 9manual 9
manual 9
 
Manual de java 3
Manual de java 3Manual de java 3
Manual de java 3
 
MANUAL DE JAVA 2
MANUAL DE JAVA 2MANUAL DE JAVA 2
MANUAL DE JAVA 2
 
Manual de java 2
Manual de java 2Manual de java 2
Manual de java 2
 

Más de Jose Luis Martínez

Modern Perl toolchain (help building microservices)
Modern Perl toolchain (help building microservices)Modern Perl toolchain (help building microservices)
Modern Perl toolchain (help building microservices)Jose Luis Martínez
 
MooseX::Datamodel - Barcelona Perl Workshop Lightning talk
MooseX::Datamodel - Barcelona Perl Workshop Lightning talkMooseX::Datamodel - Barcelona Perl Workshop Lightning talk
MooseX::Datamodel - Barcelona Perl Workshop Lightning talkJose Luis Martínez
 
Paws - Perl AWS SDK Update - November 2015
Paws - Perl AWS SDK Update - November 2015Paws - Perl AWS SDK Update - November 2015
Paws - Perl AWS SDK Update - November 2015Jose Luis Martínez
 
Building an aws sdk for Perl - Granada Perl Workshop 2014
Building an aws sdk for Perl - Granada Perl Workshop 2014Building an aws sdk for Perl - Granada Perl Workshop 2014
Building an aws sdk for Perl - Granada Perl Workshop 2014Jose Luis Martínez
 
Writing plugins for Nagios and Opsview - CAPSiDE Tech Talks
Writing plugins for Nagios and Opsview - CAPSiDE Tech TalksWriting plugins for Nagios and Opsview - CAPSiDE Tech Talks
Writing plugins for Nagios and Opsview - CAPSiDE Tech TalksJose Luis Martínez
 
Escribir plugins para Nagios en Perl
Escribir plugins para Nagios en PerlEscribir plugins para Nagios en Perl
Escribir plugins para Nagios en PerlJose Luis Martínez
 
Introducción a las Expresiones Regulares
Introducción a las Expresiones RegularesIntroducción a las Expresiones Regulares
Introducción a las Expresiones RegularesJose Luis Martínez
 

Más de Jose Luis Martínez (16)

Being cloudy with perl
Being cloudy with perlBeing cloudy with perl
Being cloudy with perl
 
Modern Perl toolchain (help building microservices)
Modern Perl toolchain (help building microservices)Modern Perl toolchain (help building microservices)
Modern Perl toolchain (help building microservices)
 
MooseX::Datamodel - Barcelona Perl Workshop Lightning talk
MooseX::Datamodel - Barcelona Perl Workshop Lightning talkMooseX::Datamodel - Barcelona Perl Workshop Lightning talk
MooseX::Datamodel - Barcelona Perl Workshop Lightning talk
 
Paws - Perl AWS SDK Update - November 2015
Paws - Perl AWS SDK Update - November 2015Paws - Perl AWS SDK Update - November 2015
Paws - Perl AWS SDK Update - November 2015
 
Paws - A Perl AWS SDK
Paws - A Perl AWS SDKPaws - A Perl AWS SDK
Paws - A Perl AWS SDK
 
Boosting MySQL (for starters)
Boosting MySQL (for starters)Boosting MySQL (for starters)
Boosting MySQL (for starters)
 
Plenv and carton
Plenv and cartonPlenv and carton
Plenv and carton
 
Building an aws sdk for Perl - Granada Perl Workshop 2014
Building an aws sdk for Perl - Granada Perl Workshop 2014Building an aws sdk for Perl - Granada Perl Workshop 2014
Building an aws sdk for Perl - Granada Perl Workshop 2014
 
Writing plugins for Nagios and Opsview - CAPSiDE Tech Talks
Writing plugins for Nagios and Opsview - CAPSiDE Tech TalksWriting plugins for Nagios and Opsview - CAPSiDE Tech Talks
Writing plugins for Nagios and Opsview - CAPSiDE Tech Talks
 
Escribir plugins para Nagios en Perl
Escribir plugins para Nagios en PerlEscribir plugins para Nagios en Perl
Escribir plugins para Nagios en Perl
 
Perl and AWS
Perl and AWSPerl and AWS
Perl and AWS
 
Writing nagios plugins in perl
Writing nagios plugins in perlWriting nagios plugins in perl
Writing nagios plugins in perl
 
Ficheros y directorios
Ficheros y directoriosFicheros y directorios
Ficheros y directorios
 
DBI
DBIDBI
DBI
 
The modern perl toolchain
The modern perl toolchainThe modern perl toolchain
The modern perl toolchain
 
Introducción a las Expresiones Regulares
Introducción a las Expresiones RegularesIntroducción a las Expresiones Regulares
Introducción a las Expresiones Regulares
 

DBIx::Class

  • 2. Conceptos • ORM – Object-Relational Mapper
  • 3. Mundo Relacional <-> Mundo OO • Tabla: Un conjunto de • Clase: Define los datos elementos con las (propiedades) y mismas propiedades, métodos que tendrá un identificados por una objeto clave. • Objeto: Instancia de • Fila: un elemento único una clase. del conjunto
  • 4. Mundo Relacional <-> Mundo OO • Tabla: Un conjunto de • Clase: Define los datos elementos con las (propiedades) y mismas propiedades, métodos que tendrá un identificados por una objeto clave. • Objeto: Instancia de • Fila: un elemento único una clase. del conjunto
  • 5. Definiciones DBIx::Class no es DBIx • ResultSet: Conjunto de Rows • ResultSource: Definición de un ResultSet • Row: Un objeto que representa una fila • Schema: Una base de datos
  • 6. ResultSet $schema->resultset(‘Users’) Users
  • 7. ResultSet $schema->resultset(‘Users’)->search(, ‘id’ => , ‘>’ => 7 - -) Users
  • 8. ResultSet $schema->resultset(‘Users’)->search(, ‘id’ => 8 -) Users
  • 9. Iterando un Resultset my $rs = $schema->resultset(“Users”)- >search(…) while (my $row = $rs->next){ say $row->FirstName }
  • 10. Iterando un Resultset while (my $row = $schema->resultset(“Users”)- >next){ say $row->FirstName } Bucle infinito!!!
  • 11. SQL::Abstract • Modulo independiente – Mantenido por los autores de DBIx::Class • Convierte estructuras de datos en consultas campo => 6 campo => , ‘>=‘ => 7 - campo => , ‘LIKE’ => ‘K%’ - campo => [ 6,7,8 ] -or => [ { campo1 => 6 }, { campo2 => 7 } ] -and => [ { cond1 }, { cond2 }, { cond3 } ] campo => { -in => [ 2,5,6 ] } campo => { -between => [1, 6] } campo => undef
  • 12. SQL::Abstract • Más potencia escondida en el segundo parámetro de search , ‘select’ => * ‘name’, ’TO_LOWER(surname)’ + ‘as’ => * ‘name’, ‘lower_surname’ + ‘order_by’ => ‘name’ } { join => ‘relation_name’ prefetch => ‘relation_name’ } , ‘select’ => * ‘name’, , ‘COUNT’ => ‘id’ - + ‘as’ => * ‘name’, ‘count’ +, group_by => * ‘name’ + }
  • 13. metodos *_rs • En contexto de lista search devuelve una lista de rows • search_rs fuerza devolver un resultset – En Template::Toolkit todo se evalua en contexto de lista  foreach my $row ($rs->search({})){ say $row->FirstName }
  • 14. Chaining de ResultSets $rs = $rs->search(, “age” => , “>=“ => 40 - -); $rs = $rs->search(, “name” => , “LIKE” => “J%” - }); …. my $obj = $rs->first;
  • 15. Find $row = $rs->find(, “id” => 3 -); __PACKAGE__->add_unique_constraint( “dni” => * ‘dni’ + ); $row = $rs->find( , ‘dni’ => ‘XXX’ -, , ‘key’ => ‘dni’ });
  • 16. Insert, Update, Delete • Insert – $o = $rs->resultset(‘Users’)->create – $o->FirstName(“Val1”); – $o->SurName(“Val2”); – $o->insert; • Update – $o = $rs->find(, ‘id’ => 8 -); – $o->FirstName(“Little Bobby”); – $o->update – $rs->search(, ‘age’ => ’0’ -)->update(, ‘age’ => 1 -); – $rs->search(, ‘age’ => ’0’ -)->update_all(, ‘age’ => 1 -); • Delete – $o = $rs->find(, ‘id’ => 8 -); – $o->delete – $rs->search(, ‘age’ => ’0’ -)->delete; – ->search(, ‘age’ => ’0’ -)->delete_all;
  • 17. Plugins útiles • DBIx::Class::InflateColumn:: – DateTime – Serializer – Object::Enum – Path::Class – IP – File – …. • DBIx::Class::Tree
  • 19. Ejercicio User Event Role
  • 20. Ejercicio(s) git clone https://github.com/diegok/dbic.curs.barcelona.pm.git Inicializar base de datos prove -lv t/* - que pase los tests Script que popula una base de datos - 3 usuarios - 5 eventos - apunta a 2 usuarios a 4 eventos Script que saca un listado de: - Los usuarios - Los eventos a los que no van a asistir usuarios