NAME
Mojolicious::Plugin::Model::DB - It is an extension of the module Mojolicious::Plugin::Model for Mojolicious applications.
SYNOPSIS
Model Functions
package MyApp::Model::Functions;
use Mojo::Base 'MojoX::Model';
sub trim {
my ($self, $value) = @_;
$value =~ s/^\s+|\s+$//g;
return $value;
}
1;
Model DB Person
package MyApp::Model::DB::Person;
use Mojo::Base 'MojoX::Model';
sub save {
my ($self, $foo) = @_;
return $self->mysql->db->insert(
'foo',
{
foo => $foo
}
)->last_insert_id;
}
1;
Mojolicious::Lite application
#!/usr/bin/env perl
use Mojolicious::Lite;
use lib 'lib';
plugin 'Model::DB' => {mysql => 'mysql://user@/mydb'};
any '/' => sub {
my $c = shift;
my $foo = $c->param('foo')
? $c->model('functions')->trim($c->param('foo')) # model functions
: '';
# model db Person
my $id = $c->db('person')->save($foo);
$c->render(text => $id);
};
app->start;
All available options
#!/usr/bin/env perl
use Mojolicious::Lite;
plugin 'Model::DB' => {
# Mojolicious::Plugin::Model::DB
namespace => 'DataBase', # default is DB
# databases options
Pg => 'postgresql://user@/mydb', # this will instantiate Mojo::Pg, in model get $self->pg,
mysql => 'mysql://user@/mydb', # this will instantiate Mojo::mysql, in model get $self->mysql,
SQLite => 'sqlite:test.db', # this will instantiate Mojo::SQLite, in model get $self->sqlite,
Redis => 'redis://localhost', # this will instantiate Mojo::Redis, in model get $self->redis,
# or using reference
Pg => Mojo::Pg->new('postgresql://postgres@/test'), # in model get $self->pg,
mysql => Mojo::mysql->strict_mode('mysql://username@/test'), # in model get $self->mysql,
SQLite => Mojo::SQLite->new('sqlite:test.db'), # in model get $self->sqlite,
Redis => Mojo::Redis->new("redis://localhost:6379/1"), # in model get $self->redis,
# Mojolicious::Plugin::Model
namespaces => ['MyApp::Model', 'MyApp::CLI::Model'],
base_classes => ['MyApp::Model'],
default => 'MyApp::Model::Pg',
params => {Pg => {uri => 'postgresql://user@/mydb'}}
};
DESCRIPTION
Mojolicious::Plugin::Model::DB It is an extension of the module Mojolicious::Plugin::Model, the intention is to separate models of database from other models, using Mojolicious::Plugin::Model::DB you can continue using all functions of Mojolicious::Plugin::Model. See more in Mojolicious::Plugin::Model.
OPTIONS
namespace
# Mojolicious::Lite
plugin 'Model::DB' => {namespace => 'DataBase'}; # It's will load from $moniker::Model::DataBase
Namespace to load models from, defaults to $moniker::Model::DB
.
databases
Mojo::Pg
# Mojolicious::Lite
plugin 'Model::DB' => {Pg => 'postgresql://user@/mydb'};
# Model::DB
package MyApp::Model::DB::Foo;
use Mojo::Base 'MojoX::Model';
sub find {
my ($self, $id) = @_;
return $self->pg->db->select(
'foo',
undef,
{
id => $id
}
)->hash;
}
1;
Mojo::mysql
# Mojolicious::Lite
plugin 'Model::DB' => {mysql => 'mysql://user@/mydb'};
# Model::DB
package MyApp::Model::DB::Foo;
use Mojo::Base 'MojoX::Model';
sub find {
my ($self, $id) = @_;
return $self->mysql->db->select(
'foo',
undef,
{
id => $id
}
)->hash;
}
1;
Mojo::SQLite
# Mojolicious::Lite
plugin 'Model::DB' => {SQLite => 'sqlite:test.db'};
# Model::DB
package MyApp::Model::DB::Foo;
use Mojo::Base 'MojoX::Model';
sub find {
my ($self, $id) = @_;
return $self->sqlite->db->select(
'foo',
undef,
{
id => $id
}
)->hash;
}
1;
Mojo::Redis
# Mojolicious::Lite
plugin 'Model::DB' => {Redis => 'redis://localhost'};
# Model::DB
package MyApp::Model::DB::Foo;
use Mojo::Base 'MojoX::Model';
sub find {
my ($self, $key) = @_;
return $self->redis->db->get($key);
}
1;
Mojo::mysql and Mojo::Redis
# Mojolicious::Lite
plugin 'Model::DB' => {
mysql => 'mysql://user@/mydb',
Redis => 'redis://localhost'
};
# Model::DB
package MyApp::Model::DB::Foo;
use Mojo::Base 'MojoX::Model';
sub find {
my ($self, $id) = @_;
my $cache = $self->redis->db->get('foo:' . $id);
return $cache if $cache;
my $foo = $self->mysql->db->select(
'foo',
undef,
{
id => $id
}
)->hash;
$self->redis->db->set('foo:' . $id, $foo);
return $foo;
}
1;
more options
see in Mojolicious::Plugin::Model#OPTIONS
HELPERS
Mojolicious::Plugin::Model::DB implements the following helpers.
db
my $db = $c->db($name);
Load, create and cache a model object with given name. Default class for model db camelize($moniker)::Model::DB
. Return `undef` if model db not found.
more helpers
see in Mojolicious::Plugin::Model#HELPERS
SEE ALSO
Mojolicious, Mojolicious::Guides, https://mojolicio.us, Mojolicious::Plugin::Model.
AUTHOR
Lucas Tiago de Moraes lucastiagodemoraes@gmail.com
COPYRIGHT AND LICENSE
This software is copyright (c) 2019 by Lucas Tiago de Moraes.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.