Data-ObjectDriver
view release on metacpan or search on metacpan
[](https://travis-ci.org/sixapart/data-objectdriver) [](https://co...
# NAME
Data::ObjectDriver - Simple, transparent data interface, with caching
# SYNOPSIS
## Set up your database driver code.
package FoodDriver;
sub driver {
Data::ObjectDriver::Driver::DBI->new(
dsn => 'dbi:mysql:dbname',
username => 'username',
password => 'password',
)
}
## Set up the classes for your recipe and ingredient objects.
package Recipe;
use base qw( Data::ObjectDriver::BaseObject );
__PACKAGE__->install_properties({
columns => [ 'recipe_id', 'title' ],
datasource => 'recipe',
primary_key => 'recipe_id',
driver => FoodDriver->driver,
});
package Ingredient;
use base qw( Data::ObjectDriver::BaseObject );
__PACKAGE__->install_properties({
columns => [ 'ingredient_id', 'recipe_id', 'name', 'quantity' ],
datasource => 'ingredient',
primary_key => [ 'recipe_id', 'ingredient_id' ],
driver => FoodDriver->driver,
});
## And now, use them!
my $recipe = Recipe->new;
$recipe->title('Banana Milkshake');
$recipe->save;
my $ingredient = Ingredient->new;
$ingredient->recipe_id($recipe->id);
$ingredient->name('Bananas');
$ingredient->quantity(5);
$ingredient->save;
## Needs more bananas!
$ingredient->quantity(10);
$ingredient->save;
## Shorthand constructor
my $ingredient = Ingredient->new(recipe_id=> $recipe->id,
name => 'Milk',
quantity => 2);
# DESCRIPTION
_Data::ObjectDriver_ is an object relational mapper, meaning that it maps
object-oriented design concepts onto a relational database.
It's inspired by, and descended from, the _MT::ObjectDriver_ classes in
Six Apart's Movable Type and TypePad weblogging products. But it adds in
caching and partitioning layers, allowing you to spread data across multiple
( run in 0.884 second using v1.01-cache-2.11-cpan-39bf76dae61 )