Data Access Objects¶
DAOs directly deal with the database. They are suited for implementing custom methods using raw SQL, if needed.
Configuration¶
DAO entities are configured using protected class properties:
<?php // Database table name protected $_tableName = ''; // Name or array of primary key(s) protected $_primaryKey = 'id'; // 'db_column' => 'object_property' protected $_fieldMap = array(); // Fields that should be hidden for getValues(), e.g. 'password' protected $_hiddenFields = array(); // 'db_column' => Format::TYPE protected $_formatMap = array(); // 'object_property' => 'db_column' protected $_valueMap = array(); // Automatically update timestamps? protected $_timestampEnabled = false; // Column name for timestamp protected $_timestampCreatedCol = 'created'; // Column name for timestamp protected $_timestampUpdatedCol = 'updated';
Possible values for $_formatMap are defined as constants in Doctrine\ActiveRecord\Dao\Format
:
<?php const NONE = ''; const INT = 'int'; const FLOAT = 'float'; const STRING = 'string'; const ALPHANUMERIC = 'alphanumeric'; const SERIALIZED = 'serialized'; const JSON = 'json'; const CSV = 'csv'; const BOOL = 'bool'; const TIME = 'H:i:s'; // Support for microseconds (up to six digits) const TIMEU = 'H:i:s.u'; // Support for timezone (e.g. "+0230") const TIMETZ = 'H:i:sO'; // Support for microseconds & timezone const TIMEUTZ = 'H:i:s.uO'; const DATE = 'Y-m-d'; const DATETIME = 'Y-m-d H:i:s'; // Support for microseconds (up to six digits) const DATETIMEU = 'Y-m-d H:i:s.u'; // Support for timezone (e.g. "+0230") const DATETIMETZ = 'Y-m-d H:i:sO'; // Support for microseconds & timezone const DATETIMEUTZ = 'Y-m-d H:i:s.uO'; const TIMESTAMP = 'U';
Example
<?php namespace App\Dao; use Doctrine\ActiveRecord\Dao\EntityDao; class UserDao extends EntityDao { protected $_tableName = 'users'; protected $_primaryKey = 'user_id'; protected $_timestampEnabled = true; }
Dao API¶
All DAOs expose the following public methods by default:
createDao(string $name)
: Returns a new DAO instance
beginTransaction()
: Start a database transaction
commit()
: Commit a database transaction
rollBack()
: Roll back a database transaction
EntityDao API¶
In addition, Doctrine\ActiveRecord\Dao\EntityDao
offers many powerful methods to easily deal with database table rows:
setData(array $data)
: Set raw data (changes can not be detected, e.g. when calling update())
setValues(array $data)
: Set multiple values
setDefinedValues(array $data)
: Set values that exist in the table schema only (slower than setValues())
getValues()
: Returns all values as array
find($id)
: Find a row by primary key
reload()
: Reload row values from database
getValues()
: Returns all values as associative array
exists($id)
: Returns true, if a row with the given primary key exists
save()
: Insert a new row
update()
: Updates changed values in the database
delete()
: Delete entity from database
getId()
: Returns the ID of the currently loaded record (throws exception, if empty)
hasId()
: Returns true, if the DAO instance has an ID assigned (primary key)
setId($id)
: Set primary key
findAll(array $cond = array(), $wrapResult = true)
: Returns all instances that match $cond (use search() or searchAll(), if you want to limit or sort the result set)
search(array $params)
: Returns a SearchResult
object (see below for supported parameters)
wrapAll(array $rows)
: Create and return a new DAO for each array element
updateRelationTable(string $relationTable, string $primaryKeyName, string $foreignKeyName, array $existing, array $updated)
: Helper function to update n-to-m relationship tables
hasTimestampEnabled()
: Returns true, if this DAO automatically adds timestamps when creating and updating rows
findList(string $colName, string $order = '', string $where = '', string $indexName = '')
: Returns a key/value array (list) of all matching rows
getTableName()
: Returns the name of the underlying database table
getPrimaryKeyName()
: Returns the name of the primary key column (throws an exception, if primary key is an array)