Alessandro Ranellucci > DBIx-Lite-0.14 > DBIx::Lite::Schema

Download:
DBIx-Lite-0.14.tar.gz

Dependencies

Annotate this POD

View/Report Bugs
Module Version: 0.14   Source   Latest Release: DBIx-Lite-0.16

NAME ^

DBIx::Lite::Schema

VERSION ^

version 0.14

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) 2012 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.

syntax highlighting: