The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Prty::ModelCache - Verwaltung/Caching von Modell-Objekten

BASE CLASS

Prty::Hash

SYNOPSIS

Instantiiere das Modell-Objekt für eine Reihe von Tabellen:

    $mod = Prty::ModelCache->new($db,@types);

Liefere alle Datensätze einer Tabelle:

    @rows|$tab = $mod->all($type);

Liefere Datensatz zu Primärschlüssel:

    $row = $mod->lookup($type,$id);

Liefere zu einem Datensatz alle Kind-Datensätze einer Kind-Tabelle:

    @rows|$tab = $mod->childs($row,$childType);

Liefere zu einem Datensatz den Eltern-Datensatz einer Eltern-Tabelle:

    $row = $mod->parent($row,$parentType);

DESCRIPTION

Ein Objekt der Klasse stellt einen Cache für eine Reihe von Tabellen/Views einer Datenbank dar. Mit den Methoden der Klasse kann über die Datensätze navigiert werden, wobei diese sukzessive geladen werden. Tabellen, deren Inhalt nicht zugegriffen wird, werden auch nicht geladen.

Da eine Tabelle/View beim ersten Zugriff vollständig geladen wird, ist die Klasse nicht für Tabellen mit Massendaten geeignet.

EXAMPLES

  • Telefonliste

Tabellen:

    Person  Telefon
    ------  -------
    id      id
    name    person_id
            nummer

Programm:

    my $mod = Prty::ModelCache->new($db,
        'person',
        'telefon',
    );
    
    for my $per ($mod->all('person')) {
        printf "%s\n",$per->name;
        for my $tel ($mod->childs($per,'telefon')) {
            printf "  %s\n",$tel->nummer;
        }
    }
    __END__
    Frank Seitz
      0176/78243503
  • Kolumnen mit Präfix

Tabellen:

    Person    Telefon
    ------    -------
    per_id    tel_id
    per_name  tel_person_id
              tel_nummer

Programm:

    my $mod = Prty::ModelCache->new($db,
        [person=>'per'],
        [telefon=>'tel'],
    );
    
    for my $per ($mod->all('person')) {
        printf "%s\n",$per->per_name;
        for my $tel ($mod->childs($per,'telefon')) {
            printf "  %s\n",$tel->tel_nummer;
        }
    }
    __END__
    Frank Seitz
      0176/78243503

METHODS

Konstruktor

new() - Konstruktor

Synopsis

    $mod = $class->new($db,@types);

Description

Instantiiere einen Cache für Modell-Objekte @types der Datenbank $db und liefere eine Referenz auf dieses Objekt zurück.

all() - Entitätsmenge

Synopsis

    @rows|$tab = $mod->all($type);

Description

Liefere alle Datensätze vom Typ $type. Im Skalarkontext liefere ein Tabellenobjekt mit den Datensätzen.

lookup() - Datensatz zu Schlüsselwert

Synopsis

    $ent = $mod->lookup($type,$id);

Description

Ermittele in der Tabelle $type den Datensatz mit dem Schlüsselwert $id und liefere diesen zurück. Existiert kein Datensatz mit dem Schlüsselwert $id, wird eine Exception geworfen.

childs() - Kind-Datensätze eines Datensatzes

Synopsis

    @rows|$tab = $mod->childs($row,$childType);

Description

Ermittele zu Datensatz $row alle Kind-Datensätze vom Typ $childType und liefere diese zurück. Im Skalarkontext liefere ein Tabellenobjekt mit diesen Datensätzen.

parent() - Eltern-Datensatz eines Datensatzes

Synopsis

    $par = $mod->parent($row,$parentType);

Description

Liefere zu Datensatz $row dessen Eltern-Datensatz vom Typ $parentType.

Kolumnen

pk() - Name Primärschlüsselkolumne

Synopsis

    $pk = $mod->pk($type);

Description

Liefere den Namen der Primärschlüsselkolumne des Modell-Objekts $type. Ohne vereinbarten Kolumnenpräfix lautet der Name

    id

Mit vereinbarten Kolumnenpräfix lautet der Name

    <prefix>_id

fk() - Name Fremdschlüsselkolumne

Synopsis

    $fk = $mod->fk($type,$parentType);

Description

Liefere den Namen der Fremdschlüsselkolumne eines Modell-Objekts vom Typ $type für ein Parent-Modell-Objekt vom Typ $parentType.

Ohne vereinbarten Kolumnenpräfix für $type lautet der Name

    <parentType>_id

Mit vereinbarten Kolumnenpräfix für $type lautet der Name

    <prefix>_<parentType>_id

VERSION

1.111

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2017 Frank Seitz

LICENSE

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