NAME
Jifty::DBI::Record - Superclass for records loaded by Jifty::DBI::Collection
SYNOPSIS
package MyRecord;
use base qw/Jifty::DBI::Record/;
DESCRIPTION
Jifty::DBI::Record encapuslates records and tables as part of the Jifty::DBI object-relational mapper.
METHODS
new ARGS
Instantiate a new, empty record object.
ARGS is a hash used to pass parameters to the _init()
function.
Unless it is overloaded, the _init() function expects one key of 'handle' with a value containing a reference to a Jifty::DBI::Handle object.
id
Returns this row's primary key.
primary_keys
Return a hash of the values of our primary keys for this function.
_accessible COLUMN ATTRIBUTE
Private method.
DEPRECATED
Returns undef unless COLUMN
has a true value for ATTRIBUTE
.
Otherwise returns COLUMN
's value for that attribute.
_primary_keys
Return our primary keys. (Subclasses should override this, but our default is that we have one primary key, named 'id'.)
_init_columns
Sets up the primary key columns.
_to_record COLUMN VALUE
This PRIVATE method takes a column name and a value for that column.
It returns undef
unless COLUMN
is a valid column for this record that refers to another record class.
If it is valid, this method returns a new record object with an id of VALUE
.
add_column
column
my $value = $self->column($column);
Returns the $value of a $column.
columns
my @columns = $record->columns;
Returns a sorted list of a $record's @columns.
readable_attributes
Returns a list this table's readable columns
writable_attributes
Returns a list of this table's writable columns
record values
As you've probably already noticed, Jifty::DBI::Record
autocreates methods for your standard get/set accessors. It also provides you with some hooks to massage the values being loaded or stored.
When you fetch a record value by calling $my_record->some_field
, Jifty::DBI::Record
provides the following hook
- after_column_name
-
This hook is called with a reference to the value returned by Jifty::DBI. Its return value is discarded.
When you set a value, Jifty::DBI
provides the following hooks
- before_set_column_name PARAMHASH
-
Jifty::DBI::Record
passes this function a reference to a paramhash composed of:- column
-
The name of the column we're updating.
- value
-
The new value for column.
- is_sql_function
-
A boolean that, if true, indicates that value is an SQL function, not just a value.
If before_set_column_name returns false, the new value isn't set.
- after_set_column_name PARAMHASH
-
This hook will be called after a value is successfully set in the database. It will be called with a reference to a paramhash that contains
column
andvalue
keys. Ifvalue
was a SQL function, it will now contain the actual value that was set.This hook's return value is ignored.
- validate_column_name VALUE
-
This hook is called just before updating the database. It expects the actual new value you're trying to set column_name to. It returns two values. The first is a boolean with truth indicating success. The second is an optional message. Note that validate_column_name may be called outside the context of a set operation to validate a potential value. (The Jifty application framework uses this as part of its AJAX validation system.)
_value
_value takes a single column name and returns that column's value for this row. Subclasses can override _value to insert custom access control.
__value
Takes a column name and returns that column's value. Subclasses should never override __value.
as_hash
Returns a version of this object's readable columns rendered as a hash of key => value pairs
_set
_set takes a single column name and a single unquoted value. It updates both the in-memory value of this column and the in-database copy. Subclasses can override _set to insert custom access control.
load
load
can be called as a class or object method.
Takes a single argument, $id. Calls load_by_cols to retrieve the row whose primary key is $id.
load_by_cols
load_by_cols
can be called as a class or object method.
Takes a hash of columns and values. Loads the first record that matches all keys.
The hash's keys are the columns to look at.
The hash's values are either: scalar values to look for OR hash references which contain 'operator' and 'value'
load_by_primary_keys
Loads records with a given set of primary keys.
load_from_hash
Takes a hashref, such as created by Jifty::DBI and populates this record's loaded values hash.
_load_from_sql QUERYSTRING @BIND_VALUES
Load a record as the result of an SQL statement
create PARAMHASH
create
can be called as either a class or object method
This method creates a new record with the values specified in the PARAMHASH.
This method calls two hooks in your subclass:
- before_create
-
This method is called before trying to create our row in the database. It's handed a reference to your paramhash. (That means it can modify your parameters on the fly).
before_create
returns a true or false value. If it returns false, the create is aborted. - after_create
-
This method is called after attempting to insert the record into the database. It gets handed a reference to the return value of the insert. That'll either be a true value or a Class::ReturnValue
delete
Delete this record from the database. On failure return a Class::ReturnValue with the error. On success, return 1;
This method has two hooks
- before_delete
-
This method is called before the record deletion, if it exists. On failure it returns a Class::ReturnValue with the error. On success it returns 1.
If this method returns an error, it causes the delete to abort and return the return value from this hook.
- after_delete
-
This method is called after deletion, with a reference to the return value from the delete operation.
table
This method returns this class's default table name. It uses Lingua::EN::Inflect to pluralize the class's name as we believe that class names for records should be in the singular and table names should be plural.
If your class name is My::App::Rhino
, your table name will default to rhinos
. If your class name is My::App::RhinoOctopus
, your default table name will be rhino_octopuses
. Not perfect, but arguably correct.
collection_class
Returns the collection class which this record belongs to; override this to subclass. If you haven't specified a collection class, this returns a best guess at the name of the collection class for this collection.
It uses a simple heuristic to determine the collection class name -- It appends "Collection" to its own name. If you want to name your records and collections differently, go right ahead, but don't say we didn't warn you.
_guess_table_name
Guesses a table name based on the class's last part.
_handle
Returns or sets the current Jifty::DBI::Handle object
PRIVATE refers_to
used for the declarative syntax
is_distinct COLUMN_NAME, VALUE
Checks to see if there is already a record in the database where COLUMN_NAME equals VALUE. If no such record exists then the COLUMN_NAME and VALUE pair is considered distinct and it returns 1. If a value is already present the test is considered to have failed and it returns a Class::ReturnValue with the error.
AUTHOR
Jesse Vincent <jesse@bestpractical.com>, Alex Vandiver <alexmv@bestpractical.com>, David Glasser <glasser@bestpractical.com>, Ruslan Zakirov <ruslan.zakirov@gmail.com>
Based on DBIx::SearchBuilder::Record, whose credits read:
Jesse Vincent, <jesse@fsck.com>
Enhancements by Ivan Kohler, <ivan-rt@420.am>
Docs by Matt Knopp <mhat@netlag.com>