NAME
Norma::ORM::Collection - Queries and results with metadata from classes consuming the Norma::ORM::Mappable role
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:
- 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
SEE ALSO
AUTHOR
David Chester <davidchester@gmx.net>
COPYRIGHT AND LICENSE
This software is copyright (c) 2010-2011 by David Chester.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.