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

NAME

Norma::ORM::Collection - Queries and results with metadata from Norma::ORM::Mappable classes

SYNOPSIS

  my $uk_customers = Norma::ORM::Collection->new(
        class => 'MyApp::Customer',
        where => { country => 'UK' },
  );

  for my $customer ($uk_customers->items) {
        ...
  }

METHODS

new(where => {...} order => $column_name, ...)

Queries the database and returns a collection which contains an array of instantiated objects, along with other metadata. We'll take the following parameters:

parameters

join

Specify join clauses as hashrefs, table names (or derived tables / sub queries if you like) pointing to column associations.

  join => [ 
        customer_notes 
                => 'customer_notes.customer_id = customers.id',

        '(select customer_id, min(order_date) first_order_date from orders group by customer_id) first_order_dates' 
                => 'first_order_dates.customer_id = customers.id'
  ]
where

Criteria for the "where" clause may be specified in a number of ways. For simple lookups, key / value pairs will suffice. To find customers in London, you might try:

  where => { 
        city => 'London', 
        country => 'UK',
  }

For comparisons other than equality, sepcify the sql comparison in the key itself. To find customers in Eastern Central London by postcode, you might try:

  where => { 
        'postal_code like' => 'EC%', 
        country => 'UK' 
  }

If you need more flexibility, you can pass in your own where clauses along-with:

  where => [
        q{ postal_code between 'EC2' and 'EC4' },
        { country => 'UK' },
  ]

Outside of custom where clauses, values will be quoted by DBI::quote.

order => $order_clause

Order the query according to this clause, if specified

limit_count

Return this many items

limit_offset

Return items starting at this offset

METHODS

items

Array of objects where each one is an instance of the given $class

total_count

The number of rows that matched this query

query

The actual SQL query that was run

class

The name of the class of the objects returned via items