NAME
DBIx::NinjaORM::StaticClassInfo - Hold the configuration information for DBIX::NinjaORM classes.
VERSION
Version 3.1.0
DESCRIPTION
This package is used to store and retrieve defaults as well as general information for a specific class. It allows for example indicating what table the objects will be related to, or what database handle to use.
Here's the full list of the options that can be set or overridden:
default_dbh
The database handle to use when performing queries. The methods that interact with the database always provide a
dbh
argument to allow using a specific database handle, but setting it here means you won't have to systematically pass that argument.$info->{'default_dbh'} = DBI->connect( "dbi:mysql:[database_name]:localhost:3306", "[user]", "[password]", );
memcache
Optionally,
DBIx::NinjaORM
uses memcache to cache objects and queries, in conjunction with thelist_cache_time
andobject_cache_time
arguments.If you want to enable the cache features, you can set this to a valid
Cache::Memcached
object (or a compatible module, such asCache::Memcached::Fast
).$info->{'memcache'} = Cache::Memcached::Fast->new( { servers => [ 'localhost:11211', ], } );
table_name
Mandatory, the name of the table that this class will be the interface for.
# Interface with a 'books' table. $info->{'table_name'} = 'books';
primary_key_name
The name of the primary key on the table specified with
table_name
.$info->{'primary_key_name'} = 'book_id';
list_cache_time
Control the list cache, which is an optional cache system in
retrieve_list()
to store how search criteria translate into object IDs.By default it is disabled (with
undef
), but it is activated by setting it to an integer that represents the cache time in seconds.# Cache for 10 seconds. $info->{'list_cache_time'} = 10; # Don't cache. $info->{'list_cache_time'} = undef;
A good use case for this would be retrieving a list of books for a given author. We would pass the author ID as a search criteria, and the resulting list of book objects does not change often. Provided that you can tolerate a 1 hour delay for a new book to show up associated with a given author, then it makes sense to set the list_cache_time to 3600 and save most of the queries to find what book otherwise belongs to the author.
object_cache_time
Control the object cache, which is an optional cache system in
retrieve_list()
to store the objects returned and be able to look them up by object ID.By default it is disabled (with
undef
), but it is activated by setting it to an integer that represents the cache time in seconds.# Cache for 10 seconds. $info->{'object_cache_time'} = 10; # Don't cache. $info->{'object_cache_time'} = undef;
A good use case for this are objects that are expensive to build. You will see more in
retrieve_list()
on how to cache objects.unique_fields
The list of unique fields on the object.
Note: DBIx::NinjaORM does not support unique indexes made of more than one field. If you add more than one field in this arrayref, the ORM will treat them as separate unique indexes.
# Declare books.isbn as unique. $info->{'unique_fields'} = [ 'isbn' ]; # Declare books.isbn and books.upc as unique. $info->{'unique_fields'} = [ 'isbn', 'upc' ];
filtering_fields
The list of fields that can be used to filter on in
retrieve_list()
.# Allow filtering based on the book name and author ID. $info->{'unique_fields'} = [ 'name', 'author_id' ];
readonly_fields
The list of fields that cannot be set directly. They will be populated in
retrieve_list
, but you won't be able to insert / update / set them directly.has_created_field
Indicate whether the table has a field name
created
to store the UNIX time at which the row was created. Default: 1.# The table doesn't have a 'created' field. $info->{'has_created_field'} = 0;
has_modified_field
Indicate whether the table has a field name
modified
to store the UNIX time at which the row was modified. Default: 1.# The table doesn't have a 'modified' field. $info->{'has_modified_field'} = 0;
cache_key_field
By default, the object cache uses the primary key value to make cached objects available to look up, but this allows specifying a different field for that purpose.
For example, you may want to use books.isbn instead of books.book_id to cache objects:
$info->{'cache_key_field'} = 'isbn';
verbose
Add debugging and tracing information, 0 by default.
# Show debugging information for operations on this class. $info->{'verbose'} = 1;
verbose_cache_operations
Add information in the logs regarding cache operations and uses.
SYNOPSIS
my $static_class_info = $class->SUPER::static_class_info();
# Set or override information.
$static_class_info->set(
{
table_name => 'books',
primary_key_name => 'book_id',
default_dbh => DBI->connect(
"dbi:mysql:[database_name]:localhost:3306",
"[user]",
"[password]",
),
}
);
# Retrieve information.
my $table_name = $static_class_info->get('table_name');
METHODS
new()
Create a new DBIx::NinjaORM::StaticClassInfo object.
my $static_class_info = DBIx::NinjaORM::StaticClassInfo->new();
get()
Retrieve the value of one of the configuration variables.
my $value = $static_class_info->get( $key );
set()
Set values for one or more configuration variables.
$static_class_info->set(
{
unique_fields => [],
filtering_fields => [],
...
}
);
BUGS
Please report any bugs or feature requests through the web interface at https://github.com/guillaumeaubert/DBIx-NinjaORM/issues/new. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc DBIx::NinjaORM::StaticClassInfo
You can also look for information at:
GitHub's request tracker
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
MetaCPAN
AUTHOR
Guillaume Aubert, <aubertg at cpan.org>
.
COPYRIGHT & LICENSE
Copyright 2009-2017 Guillaume Aubert.
This code is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the LICENSE file for more details.