NAME
ActiveRecord::Simple::Find
DESCRIPTION
ActiveRecord::Simple is a simple lightweight implementation of ActiveRecord pattern. It's fast, very simple and very light.
ActiveRecord::Simple::Find is a class to search, ordering, organize and fetch data from database. It generates SQL-code and iteracts with DBI to execute it.
SYNOPSIS
my @customers = Customer->find({ name => 'Bill' })->fetch; my @customers = Customer->find({ zip => [1001, 1002, 1003] })->fetch; my @customers = Customer->find('age > ?', 21)->fetch; my @customers = Customer->find([1, 2, 3, 4, 5])->order_by('id')->desc->fetch;
METHODS
ActiveRecord::Simple::Find implements the following methods.
new
Object constructor, creates basic search pattern. Available from method "find" of the base class:
# SELECT * FROM log WHERE site_id = 1 AND level = 'error';
my
$f
= Log->find({
id
=> 1,
level
=>
'error'
});
# SELECT * FROM log WHERE site_id = 1 AND level IN ('error', 'warning');
my
$f
= Log->find({
id
=> 1,
level
=> [
'error'
,
'warning'
] });
# SELECT * FROM customer WHERE age > 21;
Customer->find(
'age > ?'
, 21);
# SELECT * FROM customer WHERE id = 100;
Customer->find(100);
# SELECT * FROM customer WHERE id IN (100, 101, 191);
Customer->find([100, 101, 191]);
last
Fetch last row from database:
# get very last log:
my
$last_log
= Log->find->
last
;
# get last error log of site number 1:
my
$last_log
= Log->find({
level
=>
'error'
,
site_id
=> 1 })->
last
;
first
Fetch first row:
# get very first log:
my
$first_log
= Log->find->first;
# get first error log of site number 1:
my
$first_log
= Log->find({
level
=>
'error'
,
site_id
=> 1 })->first;
count
Fetch number of records in the database:
my
$cnt
= Log->find->count();
my
$cnt_warnings
= Log->find({
level
=>
'warnings'
})->count;
exists
Check the record is exist:
if
(Log->find({
level
=>
'fatal'
})->
exists
) {
die
"got fatal error log!"
;
}
fetch
Fetch data from the database as objects:
my
@errors
= Log->find({
level
=>
'error'
})->fetch;
my
$errors
= Log->find({
level
=>
'error'
})->fetch;
# the same, but returns ARRAY ref
my
$error
= Log->find(1)->fetch;
# only one record
my
@only_five_errors
= Log->find({
level
=>
'error'
})->fetch(5);
next
Fetch next n rows from the database:
my
$finder
= Log->find({
level
=>
'info'
});
# get logs by lists of 10 elements:
while
(
my
@logs
=
$finder
->
next
(10)) {
$_
->id,
"\n"
for
@logs
;
}
only
Specify field names to get from database:
# SELECT id, message FROM log;
my
@logs
= Log->find->only(
'id'
,
'message'
);
fields
The same as "only":
# SELECT id, message FROM log;
my
@logs
= Log->find->fields(
'id'
,
'message'
);
order_by
Set "ORDER BY" command to the query:
# SELECT * FROM log ORDER BY inserted_time;
my
@logs
= Log->find->order_by(
'inserted_time'
);
# SELECT * FROM log ORDER BY level, id;
my
@logs
= Log->find->order_by(
'level'
,
'id'
);
asc
Set "ASC" to the query:
# SELECT * FROM log ORDER BY id ASC;
my
@logs
= Log->find->order_by(
'id'
)->asc;
desc
Set "DESC" to the query:
# SELECT * FROM log ORDER BY id DESC;
my
@logs
= Log->find->order_by(
'id'
)->desc;
limit
SET "LIMIT" to the query:
# SELECT * FROM log LIMIT 100;
my
@logs
= Log->find->limit(100);
offset
SET "OFFSET" to the query:
# SELECT * FROM log LIMIT 100 OFFSET 99;
my
@logs
= Log->find->limit(100)->offset(99);
group_by
Set "GROUP BY":
my
@logs
= Log->find->group_by(
'level'
);
with
Set "LEFT JOIN" command to the query:
# SELECT l.*, s.* FROM logs l LEFT JOIN sites s ON s.id = l.site_id
my
@logs_and_sites
= Log->find->
with
(
'sites'
);
$_
->site->name,
": "
,
$_
->mesage
for
@logs_and_sites
;
left_join
The same as "with" method
uplod
Fetch object from database and load into ActiveRecord::Simple::Find object:
my
$logs
= Log->find({
level
=> [
'error'
,
'fatal'
] });
$logs
->order_by(
'level'
)->desc;
$logs
->limit(100);
$logs
->upload;
$_
->message
for
@$logs
;
to_sql
Show SQL-query that genereted by ActiveRecord::Simple::Find class:
my
$finder
= Log->frind->only(
'message'
)->order_by(
'level'
)->desc->limit(100);
$finder
->to_sql;
# prints: SELECT message FROM log ORDER BY level DESC LIMIT 100;
EXAMPLES
# SELECT * FROM pizza WHERE name = 'pepperoni';
Pizza->find({
name
=>
'pepperoni'
});
# SELECT first_name, last_name FORM customer WHERE age > 21 ORDER BY id DESC LIMIT 100;
Customer->find(
'age > ?'
, 21)->only(
'first_name'
,
'last_name'
)->order_by(
'id'
)->desc->limit(100);
# SELECT p.filename, p.id, pp.* FROM photo p LEFT JOIN person pp ON p.person_id = pp.id WHERE p.size = '1020x768';
Photo->find({
size
=>
'1020x768'
})->
with
(
'person'
)->only(
'filename'
,
'id'
);
# SELECT t.* FROM topping_pizza tp LEFT JOIN topping t ON t.id = tp.topping_id WHERE tp.pizza_id = <$val>;
Pizza->get(<
$val
>)->toppings();
AUTHOR
shootnix, <shootnix at cpan.org>
BUGS
Please report any bugs or feature requests to shootnix@cpan.org
, or through the github: https://github.com/shootnix/activerecord-simple/issues
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc ActiveRecord::Simple
You can also look for information at:
Github wiki:
ACKNOWLEDGEMENTS
LICENSE AND COPYRIGHT
Copyright 2013-2018 shootnix.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.