• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
DBIx::Class
 

DBIx::Class

on

  • 492 views

Tema: DBIx::Class

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

Statistics

Views

Total Views
492
Views on SlideShare
490
Embed Views
2

Actions

Likes
0
Downloads
6
Comments
0

1 Embed 2

http://coderwall.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    DBIx::Class DBIx::Class Presentation Transcript

    • 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 (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
    • 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
    • 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 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
    • 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
    • EjercicioUser EventRole
    • 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