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',
});
if insert to table has auto increment then return $row object with fill in key column by last_insert_id.
my $row = $model->set( user => {
name => 'insert record',
});
say $row->id; # show last_insert_id()
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
DATA DRIVERS
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.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 754:
Non-ASCII character seen before =encoding in '<döt>'. Assuming UTF-8