DBIx::Class

555 views
500 views

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
555
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

×