NAME

ObjectDB::Table - actions on tables

SYNOPSIS

package MyDB;
use base 'ObjectDB';

sub init_db {
    ...
    return $dbh;
}

package MyAuthor;
use base 'MyDB';

__PACKAGE__->meta(
    table          => 'author',
    columns        => [qw/id name/],
    primary_key    => 'id',
    auto_increment => 'id',
    relationships  => {
        books => {
            type = 'one to many',
            class => 'MyBook',
            map   => {id => 'author_id'}
        }
    }
);

package MyBook;
use base 'MyDB';

__PACKAGE__->meta(
    table          => 'book',
    columns        => [qw/id author_id title/],
    primary_key    => 'id',
    auto_increment => 'id',
    relationships  => {
        author => {
            type = 'many to one',
            class => 'MyAuthor',
            map   => {author_id => 'id'}
        }
    }
);

my @books = MyBook->table->find(
    with     => 'author',
    order_by => [title => 'ASC'],
    page     => 1,
    per_page => 10
);

DESCRIPTION

ObjectDB::Table allows to perform actions on table: find, update, delete many rows at a time.

Methods

find

Finds specific rows. Query builder is SQL::Composer.

my @books = MyBook->table->find;
my @books = MyBook->table->find(where => [...]);
my @books = MyBook->table->find(where => [...], order_by => [...]);
my @books =
  MyBook->table->find(where => [...], order_by => [...], group_by => [...]);

When using rows_as_hashes returns array of hashes instead of objects.

find_by_compose

Finds by using raw query.

my @books = MyBook->find_by_compose(table => 'book', columns => ['id', 'title']);

When using rows_as_hashes returns array of hashes instead of objects.

find_by_sql

Finds by using raw SQL.

my @books = MyBook->find_by_sql('SELECT * FROM books WHERE title = ?', ['About Everything']);
my @books = MyBook->find_by_sql('SELECT * FROM books WHERE title = :title', { title => 'About Everything' });

When using rows_as_hashes returns array of hashes instead of objects.

count

A convenient method for counting.

my $total_books = MyBook->table->count;
update

Updates many rows at a time.

MyBook->table->update(set => {author_id => 1}, where => [author_id => 2]);
delete

Deletes many rows at a time.

MyBook->table->delete;
MyBook->table->delete(where => [...]);