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


Data-Model documentation  | view source Contained in the Data-Model distribution.

Index


NAME

Top

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

SYNOPSIS

Top

  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

Top

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

Top

One package can define two or more tables using DSL.

see Data::Model::Schema.

METHODS

Top

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

Top

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

Top

see Data::Model::Transaction.

DATA DRIVERS

Top

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

Top

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

ACKNOWLEDGEMENTS

Top

Benjamin Trott more idea given by Data::ObjectDriver

AUTHOR

Top

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

REPOSITORY

Top

  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

Top

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


Data-Model documentation  | view source Contained in the Data-Model distribution.