NAME

DBIx::Lite::Schema

VERSION

version 0.16

OVERVIEW

This class holds the very loose schema definitions that enable some advanced features of DBIx::Lite. Note that you can do all main operations, including searches and manipulations, with no need to define any schema.

An empty DBIx::Lite::Schema is created every time you create a DBIx::Lite object. Then you can access it to customize it. Otherwise, you can prepare a Schema object and reutilize it across multiple connections:

my $schema = DBIx::Lite::Schema->new;
my $conn1 = DBIx::Lite->new(schema => $schema)->connect(...);
my $conn2 = DBIx::Lite->new(schema => $schema)->connect(...);

new

The constructor takes no arguments.

table

This method accepts a table name and returs the DBIx::Lite::Schema::Table object corresponding to the requested table. You can then call methods on it.

$schema->table('books')->autopk('id');

one_to_many

This methods sets up a 1-to-N relationship between two tables. Just pass two table names to it, appending the relation key column name:

$schema->one_to_many('authors.id' => 'books.author_id');

This will have the following effects:

provide a books accessor method in the authors Result objects
provide a books accessor method in the authors ResultSet objects
allow to call <$author-insert_related('books', {...})>>

If you supply a third argument, it will be used to set up the reverse accessor method. For example:

$schema->one_to_many('authors.id' => 'books.author_id', 'author');

will install a author accessor method in the books Result objects.

Note that relationships can be chained:

$dbix->schema->one_to_many('authors.id' => 'books.author_id');
$dbix->schema->one_to_many('books.id' => 'chapters.books_id');
my @chapters = $dbix
    ->table('authors')
    ->search({ country => 'IT' })
    ->books
    ->chapters
    ->search({ page_count => { '>' => 20 } })
    ->all;

You can use the same approach to traverse many-to-many relationships.

AUTHOR

Alessandro Ranellucci <aar@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Alessandro Ranellucci.

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