Git Product home page Git Product logo

data-model's Introduction

NAME
    Data::Model - model interface which had more data sources unified, a.k.a
    data/object mapper

SYNOPSIS
      package Your::Model;
      use base 'Data::Model';
      use Data::Model::Schema;
      use Data::Model::Driver::DBI;
  
      my $dbfile = '/foo/bar.db';
      my $driver = Data::Model::Driver::DBI->new(
          dsn => "dbi:SQLite:dbname=$dbfile",
      );
      base_driver( $driver );
  
      install_model user => schema {
          key 'id';
          columns qw/
              id
              name
          /;
      };
  
      # create database file
      unless (-f $dbfile) {
          my $dbh = DBI->connect($dsn, '', '', { RaiseError => 1, PrintError => 0 });
          for my $sql (__PACKAGE__->as_sqls) {
              $dbh->do( $sql );
          }
          $dbh->disconnect;
      }
  
      # in your script:
      use Your::Model;
  
      my $model = Your::Model->new;
  
      # insert
      my $row = $model->set(
          user => {
              id => 1,
          }
      );
  
      my $row = $model->lookup( user => 1 );
      $row->delete;

DESCRIPTION
    Data::Model is can use as ORM which can be defined briefly.

    There are few documents. It is due to be increased in the near future.

SCHEMA DEFINITION
    One package can define two or more tables using DSL.

    see Data::Model::Schema.

METHODS
  new([ \%options ]);
      my $model = Class->new;

  lookup($target => $key)
      my $row = $model->lookup( user => $id );
      print $row->name;

  lookup_multi($target => \@keylist)
      my @row = $model->lookup_multi( user => [ $id1, $id2 ] );
      print $row[0]->name;
      print $row[1]->name;

  get($target => $key [, \%options ])
      my $iterator = $model->get( user => { 
          id => {
              IN => [ $id1, $id2 ],
          }
      });
      while (my $row = $iterator->next) {
          print $row->name;
      }
      # or
      while (my $row = <$iterator>) {
          print $row->name;
      }
      # or
      while (<$iterator>) {
          print $_->name;
      }

  set($target => $key, => \%values [, \%options ])
      $model->set( user => {
        id   => 3,
        name => 'insert record',
      });

    if insert to table has auto increment then return $row object with fill
    in key column by last_insert_id.

      my $row = $model->set( user => {
        name => 'insert record',
      });
      say $row->id; # show last_insert_id()

  delete($target => $key [, \%options ])
      $model->delete( user => 3 ); # id = 3 is deleted

ROW OBJECT METHODS
    row object is provided by Data::Model::Row.

  update
      my $row = $model->lookup( user => $id );
      $row->name('update record');
      $row->update;

  delete
      my $row = $model->lookup( user => $id );
      $row->delete;

TRANSACTION
    see Data::Model::Transaction.

DATA DRIVERS
  DBI
    see Data::Model::Driver::DBI.

  DBI::MasterSlave
    master-slave composition for mysql.

    see Data::Model::Driver::DBI::MasterSlave.

  Cache
    Cash of the result of a query.

    see Data::Model::Driver::Cache::HASH, see
    Data::Model::Driver::Cache::Memcached.

  Memcached
    memcached is used for data storage.

    see Data::Model::Driver::Memcached.

  Queue::Q4M
    queuing manager for Q4M.

    see Data::Model::Driver::Queue::Q4M.

  Memory
    on memory storage.

    see Data::Model::Driver::Memory.

SEE ALSO
    Data::Model::Row, Data::Model::Iterator

ACKNOWLEDGEMENTS
    Benjamin Trott more idea given by Data::ObjectDriver

AUTHOR
    Kazuhiro Osawa <yappo <at> shibuya <döt> pl>

REPOSITORY
      git clone git://github.com/yappo/p5-Data-Model.git

    Data::Model's Git repository is hosted at
    <http://github.com/yappo/p5-Data-Model>. patches and collaborators are
    welcome.

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

POD ERRORS
    Hey! The above document had some coding errors, which are explained
    below:

    Around line 754:
        Non-ASCII character seen before =encoding in '<döt>'. Assuming
        UTF-8

data-model's People

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.