Kazuhiro Osawa > Data-Model-0.00007 > Data::Model

Download:
Data-Model-0.00007.tar.gz

Dependencies

Annotate this POD

Website

CPAN RT

Open  2
View/Report Bugs
Module Version: 0.00007   Source  

NAME ^

Data::Model - model interface which had more data sources unified, a.k.a data/object mapper

SYNOPSIS ^

  package Your::Model;
  use base 'Data::Model';
  use Data::Model::Schema;
  use Data::Model::Driver::DBI;
  
  my $dbfile = '/foo/bar.db';
  my $driver = Data::Model::Driver::DBI->new(
      dsn => "dbi:SQLite:dbname=$dbfile",
  );
  base_driver( $driver );
  
  install_model user => schema {
      key 'id';
      columns qw/
          id
          name
      /;
  };
  
  # create database file
  unless (-f $dbfile) {
      my $dbh = DBI->connect($dsn, '', '', { RaiseError => 1, PrintError => 0 });
      for my $sql (__PACKAGE__->as_sqls) {
          $dbh->do( $sql );
      }
      $dbh->disconnect;
  }
  
  # in your script:
  use Your::Model;
  
  my $model = Your::Model->new;
  
  # insert
  my $row = $model->set(
      user => {
          id => 1,
      }
  );
  
  my $row = $model->lookup( user => 1 );
  $row->delete;

DESCRIPTION ^

Data::Model is can use as ORM which can be defined briefly.

There are few documents. It is due to be increased in the near future.

SCHEMA DEFINITION ^

One package can define two or more tables using DSL.

see Data::Model::Schema.

METHODS ^

new([ \%options ]);

  my $model = Class->new;

lookup($target => $key)

  my $row = $model->lookup( user => $id );
  print $row->name;

lookup_multi($target => \@keylist)

  my @row = $model->lookup_multi( user => [ $id1, $id2 ] );
  print $row[0]->name;
  print $row[1]->name;

get($target => $key [, \%options ])

  my $iterator = $model->get( user => { 
      id => {
          IN => [ $id1, $id2 ],
      }
  });
  while (my $row = $iterator->next) {
      print $row->name;
  }
  # or
  while (my $row = <$iterator>) {
      print $row->name;
  }
  # or
  while (<$iterator>) {
      print $_->name;
  }

set($target => $key, => \%values [, \%options ])

  $model->set( user => {
    id   => 3,
    name => 'insert record',
  });

delete($target => $key [, \%options ])

  $model->delete( user => 3 ); # id = 3 is deleted

ROW OBJECT METHODS ^

row object is provided by Data::Model::Row.

update

  my $row = $model->lookup( user => $id );
  $row->name('update record');
  $row->update;

delete

  my $row = $model->lookup( user => $id );
  $row->delete;

TRANSACTION ^

see Data::Model::Transaction.

DATA DRIVERS ^

DBI

see Data::Model::Driver::DBI.

DBI::MasterSlave

master-slave composition for mysql.

see Data::Model::Driver::DBI::MasterSlave.

Cache

Cash of the result of a query.

see Data::Model::Driver::Cache::HASH, see Data::Model::Driver::Cache::Memcached.

Memcached

memcached is used for data storage.

see Data::Model::Driver::Memcached.

Queue::Q4M

queuing manager for Q4M.

see Data::Model::Driver::Queue::Q4M.

Memory

on memory storage.

see Data::Model::Driver::Memory.

SEE ALSO ^

Data::Model::Row, Data::Model::Iterator

ACKNOWLEDGEMENTS ^

Benjamin Trott more idea given by Data::ObjectDriver

AUTHOR ^

Kazuhiro Osawa <yappo <at> shibuya <döt> pl>

REPOSITORY ^

  git clone git://github.com/yappo/p5-Data-Model.git

Data::Model's Git repository is hosted at http://github.com/yappo/p5-Data-Model. patches and collaborators are welcome.

LICENSE ^

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

syntax highlighting: