DBIx-ObjectMapper

 view release on metacpan or  search on metacpan

t/12_session/lib/MyTest11.pm  view on Meta::CPAN

my $artist = $mapper->metadata->table( artist => 'autoload' );
my $cd = $mapper->metadata->table(
    cd => 'autoload',
    {
        foreign_key => {
            table => 'artist',
            keys => ['artist_id'],
            refs => ['id'],
        }
    }
);
my $track = $mapper->metadata->table(
    track => 'autoload',
    {
        foreign_key => {
            table => 'cd',
            keys => ['cd_id'],
            refs => ['id'],
        }
    }
);

my $linernote = $mapper->metadata->table( linernote => 'autoload' );

sub mapping {
    my $artist_mapper = $mapper->maps(
        $artist => 'MyTest11::Artist',
        constructor => { auto => 1 },
        accessors   => { auto => 1 },
    );

    my $cd_mapper = $mapper->maps(
        $cd => 'MyTest11::Cd',
        constructor => { auto => 1 },
        accessors   => { auto => 1 },
    );

    my $track_mapper = $mapper->maps(
        $track => 'MyTest11::Track',
        constructor => { auto => 1 },
        accessors   => { auto => 1 },
    );

    my $linernote_mapper = $mapper->maps(
        $linernote => 'MyTest11::Linernote',
        constructor => { auto => 1 },
        accessors   => { auto => 1 },
    );
}

sub mapping_with_foreign_key {
    my $artist_mapper = $mapper->maps(
        $artist => 'MyTest11::Artist',
        constructor => { auto => 1 },
        accessors   => { auto => 1 },
        attributes  => {
            properties => {
                cds => +{
                    isa => $mapper->relation(
                        has_many => 'MyTest11::Cd',
                        { cascade  => 'all' },
                    ),
                }
            }
        }
    );

    my $cd_mapper = $mapper->maps(
        $cd => 'MyTest11::Cd',
        constructor => { auto => 1 },
        accessors   => { auto => 1 },
        attributes  => {
            properties => {
                artist => +{
                    isa => $mapper->relation( belongs_to => 'MyTest11::Artist' )
                },
                tracks => +{
                    isa => $mapper->relation(
                        has_many => 'MyTest11::Track',
                        { cascade  => 'all' },
                    ),
                },
                linernote => +{
                    isa =>
                        $mapper->relation(
                            has_one => 'MyTest11::Linernote',
                            { cascade  => 'all' },
                        ),
                }
            }
        }
    );

    my $track_mapper = $mapper->maps(
        $track => 'MyTest11::Track',
        constructor => { auto => 1 },
        accessors   => { auto => 1 },
        attributes  => {
            properties => {
                cd => {
                    isa => $mapper->relation( belongs_to => 'MyTest11::Cd' ),
                }
            }
        }
    );

    my $linernote_mapper = $mapper->maps(
        $linernote => 'MyTest11::Linernote',
        constructor => { auto => 1 },
        accessors   => { auto => 1 },
        attributes => {
            properties => {
                cd => {
                    isa => $mapper->relation( has_one => 'MyTest11::Cd' ),
                }
            }
        }
    );
}

sub engine { $engine }

sub mapper { $mapper }

sub setup_default_data {
    my $self = shift;
    my $artist_ins = $artist->insert->values( name => 'Led Zeppelin' )->execute(['id']);
    my $artist_id = $artist_ins->{id};

    my $cds = [
        {
        'Led Zeppelin' => [
            'GOOD TIMES BAD TIMES',
            'BABE I\'M GONNA LEAVE YOU',
            'YOU SHOOK ME',
            'DAZED AND CONFUSED',
            'YOUR TIME IS GONNA COME',
            'BLACK MOUNTAIN SIDE',
            'COMMUNICATION BREAKDOWN',
            'I CAN\'T QUIT YOU BABY',
            'HOW MANY MORE TIMES'
        ],
        },{
        'Led Zeppelin II' => [
            'WHOLE LOTTA LOVE',
            'WHAT IS AND WHAT SHOULD NEVER BE',
            'LEMON SONG,THE',



( run in 0.878 second using v1.01-cache-2.11-cpan-39bf76dae61 )