Доброго всем
DBIx::Mojo::Model
¡ ¡ ¡ ALL GLORY TO GLORIA ! ! !
NAME
DBIx::Mojo::Model - base class for DBI models with templating statements by Mojo::Template.
SINOPSYS
Init once base singleton for process with dbh and (optional) template vars:
use DBIx::Mojo::Model;
DBIx::Mojo::Model->singleton(dbh=>$dbh, template_vars=>$t);
In child model must define SQL dict in __DATA__ of model package:
package Model::Foo;
use Mojo::Base 'DBIx::Mojo::Model';
# optional outside dict __DATA__
our $DATA = ['Foo.pm.sql'];
sub new {
state $self = shift->SUPER::new(mt=>{tag_start=>'{%', tag_end=>'%}'}, @_);
}
sub foo {
my $self = ref $_[0] ? shift : shift->new;
$self->dbh->selectrow_hashref($self->sth('foo', where => 'where id=?',), undef, (shift));
}
__DATA__
@@ foo?cached=1
%# my foo statement with prepare_cached
select *
from foo
{% $where %}
;
In controller:
...
has model => sub { require Model::Foo; Model::Foo->new };
sub actionFoo {
my $c = shift;
my $foo = $c->model->foo($c->param('id'));
...
}
ATTRIBUTES
dbh
dict
DBIx::Mojo::Template object. If not defined then will auto create from __DATA__ current model package.
Model::Foo->new(dict=>DBIx::Mojo::Template->new('Model::Foo', ...), ...)
mt
Hashref Mojo::Template object attributes. Will passed to Mojo::Template->new
then dict auto create
template_vars
Hashref variables applies in statement templates.
dbi_cache_st
Boolean switch: 1(true) - use DBI caching ($dbh->prepare_cached) and 0(false) overvise this module caching.
The statement must has defined cached
param:
@@ foo query name?cached=1
select ...
Defaults is true for save statement inside DBIx::Mojo::Statement object atribute sth
.
METHODS
new
Define or copy/merge attributes from singleton
.
singleton
Initialize default attributes for child model modules. Mostly dbh
and template_vars
sth
This is main method.
First input arg is dict statement name, next args key => val
are template variables. Return DBI prepared (cached if param 'cached' is true) statement.
Templates
Body of template statement get as:
$mFoo->dict->{'foo'}->sql
Templates name can has additional params as ulr query:
@@ foo.bar/baz?a=156&b=c
...
then model object the name of statement is url path and query is param:
$mFoo->dict->{'foo.bar/baz'}->param->{b} # 'c'
AUTHOR
Михаил Че (Mikhail Che), <mche[-at-]cpan.org>
BUGS / CONTRIBUTING
Please report any bugs or feature requests at https://github.com/mche/Mojolicious-Plugin-RoutesAuthDBI/issues. Pull requests also welcome.
COPYRIGHT
Copyright 2016 Mikhail Che.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.