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