0
DBIx::ClassAll 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           (propiedad...
Mundo Relacional <-> Mundo OO• Tabla: Un conjunto de     • Clase: Define los datos  elementos con las           (propiedad...
DefinicionesDBIx::Class no es DBIx• ResultSet: Conjunto de Rows• ResultSource: Definición de un ResultSet• Row: Un objeto ...
ResultSet        $schema->resultset(‘Users’)Users
ResultSet  $schema->resultset(‘Users’)->search(, ‘id’ => , ‘>’ => 7 - -)Users
ResultSet        $schema->resultset(‘Users’)->search(, ‘id’ => 8 -)Users
Iterando un Resultsetmy $rs = $schema->resultset(“Users”)-  >search(…)while (my $row = $rs->next){  say $row->FirstName}
Iterando un Resultsetwhile (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 consul...
SQL::Abstract• Más potencia escondida en el segundo parámetro de search, ‘select’ => * ‘name’, ’TO_LOWER(surname)’ +  ‘as’...
metodos *_rs• En contexto de lista search devuelve una lista  de rows• search_rs fuerza devolver un resultset  – En Templa...
Chaining de ResultSets$rs = $rs->search(, “age” => , “>=“ => 40 - -);$rs = $rs->search(, “name” => , “LIKE” => “J%” -  });...
Find$row = $rs->find(, “id” => 3 -);__PACKAGE__->add_unique_constraint(  “dni” => * ‘dni’ +  );$row = $rs->find( , ‘dni’ =...
Insert, Update, Delete•   Insert     –   $o = $rs->resultset(‘Users’)->create     –   $o->FirstName(“Val1”);     –   $o->S...
Plugins útiles• DBIx::Class::InflateColumn::  – DateTime  – Serializer  – Object::Enum  – Path::Class  – IP  – File  – ….•...
Referencia• DBIx::Class::Manual::Cookbook• DBIx::Class::Manual::FAQ
EjercicioUser                   EventRole
Ejercicio(s)git clone    https://github.com/diegok/dbic.curs.barcelona.pm.gitInicializar base de datos    prove -lv t/*   ...
Upcoming SlideShare
Loading in...5
×

DBIx::Class

418

Published on

Tema: DBIx::Class
Curso de Perl avanzado Barcelona.pm 2012

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
418
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "DBIx::Class"

  1. 1. DBIx::ClassAll your databases are belong to us
  2. 2. Conceptos• ORM – Object-Relational Mapper
  3. 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. 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. 5. DefinicionesDBIx::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. 6. ResultSet $schema->resultset(‘Users’)Users
  7. 7. ResultSet $schema->resultset(‘Users’)->search(, ‘id’ => , ‘>’ => 7 - -)Users
  8. 8. ResultSet $schema->resultset(‘Users’)->search(, ‘id’ => 8 -)Users
  9. 9. Iterando un Resultsetmy $rs = $schema->resultset(“Users”)- >search(…)while (my $row = $rs->next){ say $row->FirstName}
  10. 10. Iterando un Resultsetwhile (my $row = $schema->resultset(“Users”)- >next){ say $row->FirstName}Bucle infinito!!!
  11. 11. SQL::Abstract• Modulo independiente – Mantenido por los autores de DBIx::Class• Convierte estructuras de datos en consultascampo => 6campo => , ‘>=‘ => 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. 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. 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. 14. Chaining de ResultSets$rs = $rs->search(, “age” => , “>=“ => 40 - -);$rs = $rs->search(, “name” => , “LIKE” => “J%” - });….my $obj = $rs->first;
  15. 15. Find$row = $rs->find(, “id” => 3 -);__PACKAGE__->add_unique_constraint( “dni” => * ‘dni’ + );$row = $rs->find( , ‘dni’ => ‘XXX’ -, , ‘key’ => ‘dni’ });
  16. 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. 17. Plugins útiles• DBIx::Class::InflateColumn:: – DateTime – Serializer – Object::Enum – Path::Class – IP – File – ….• DBIx::Class::Tree
  18. 18. Referencia• DBIx::Class::Manual::Cookbook• DBIx::Class::Manual::FAQ
  19. 19. EjercicioUser EventRole
  20. 20. Ejercicio(s)git clone https://github.com/diegok/dbic.curs.barcelona.pm.gitInicializar base de datos prove -lv t/* - que pase los testsScript que popula una base de datos - 3 usuarios - 5 eventos - apunta a 2 usuarios a 4 eventosScript que saca un listado de: - Los usuarios - Los eventos a los que no van a asistir usuarios
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×