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.