class UserRecord extends TActiveRecord
{
const TABLE='users'; //optional table name.
public $username; //corresponds to the fieldname in the table
public $email;
returns active record finder instance
public static function finder($className=__CLASS__)
{
return parent::finder($className);
}
}
create a connection and give it to the ActiveRecord manager.
$dsn = 'pgsql:host=localhost;dbname=test';
$conn = new TDbConnection($dsn, 'dbuser','dbpass');
TActiveRecordManager::getInstance()->setDbConnection($conn);
load the user record with username (primary key) 'admin'.
$user = UserRecord::finder()->findByPk('admin');
$user->email = '[email protected]';
$user->save(); //update the 'admin' record.
Since v3.1.1, TActiveRecord starts to support column mapping. The physical
column names (defined in database) can be mapped to logical column names
(defined in active classes as public properties.) To use this feature, declare
a static class variable COLUMN_MAPPING like the following:
class UserRecord extends TActiveRecord
{
const TABLE='users';
public static $COLUMN_MAPPING=array
(
'user_id'=>'username',
'email_address'=>'email',
);
public $username;
public $email;
}
In the above, the 'users' table consists of 'user_id' and 'email_address' columns,
while the UserRecord class declares 'username' and 'email' properties.
By using column mapping, we can regularize the naming convention of column names
in active record.
Since v3.1.2, TActiveRecord enhanced its support to access of foreign objects.
By declaring a public static variable RELATIONS like the following, one can access
the corresponding foreign objects easily:
class UserRecord extends TActiveRecord
{
const TABLE='users';
public static $RELATIONS=array
(
'department'=>array(self::BELONGS_TO, 'DepartmentRecord', 'department_id'),
'contacts'=>array(self::HAS_MANY, 'ContactRecord', 'user_id'),
);
}
In the above, the users table is related with departments table (represented by
DepartmentRecord) and contacts table (represented by ContactRecord). Now, given a UserRecord
instance $user, one can access its department and contacts simply by: $user->department and
$user->contacts. No explicit data fetching is needed. Internally, the foreign objects are
fetched in a lazy way, which avoids unnecessary overhead if the foreign objects are not accessed
at all.
Since v3.1.2, new events OnInsert, OnUpdate and OnDelete are available.
The event OnInsert, OnUpdate and OnDelete methods are executed before
inserting, updating, and deleting the current record, respectively. You may override
these methods; a TActiveRecordChangeEventParameter parameter is passed to these methods.
The property {@link TActiveRecordChangeEventParameter::setIsValid IsValid} of the parameter
can be set to false to prevent the change action to be executed. This can be used,
for example, to validate the record before the action is executed. For example,
in the following the password property is hashed before a new record is inserted.
class UserRecord extends TActiveRecord
{
function OnInsert($param)
{
parent method should be called to raise the event
parent::OnInsert($param);
$this->nounce = md5(time());
$this->password = md5($this->password.$this->nounce);
}
}
Since v3.1.3 you can also define a method that returns the table name.
class UserRecord extends TActiveRecord
{
public function table()
{
return 'users';
}
}
显示文件
Open project: pradosoft/prado
Class Usage Examples
Property | Type | Description | |
---|---|---|---|
$COLUMN_MAPPING | The keys are physical column names as defined in database, and the values are logical column names as defined as public variable/property names for the corresponding active record class. | ||
$RELATIONS | The keys are public variable/property names defined in the AR class. Each value is an array, e.g. array(self::HAS_MANY, 'PlayerRecord'). |
Property | Type | Description | |
---|---|---|---|
$_connection | database connection object. | ||
$_invalidFinderResult | Defaults to 'null' | ||
$_recordState | record state: 0 = new, 1 = loaded, 2 = deleted. |
Method | Description | |
---|---|---|
__call ( $method, $args ) : mixed | Dynamic find method using parts of method name as search criteria. | |
__construct ( $data = [], $connection = null ) | Create a new instance of an active record with given $data. The record can be saved to the database specified by the $connection object. | |
__get ( $name ) : mixed | Magic method for reading properties. | |
__set ( $name, $value ) | Magic method for writing properties. | |
__sleep ( ) | Prevent __call() method creating __sleep() when serializing. | |
__wakeup ( ) | Prevent __call() method creating __wakeup() when unserializing. | |
copyFrom ( $data ) | Copies data from an array or another object. | |
count ( $criteria = null, $parameters = [] ) : integer | Find the number of records. | |
createRecord ( $type, $data ) : |
Create an AR instance specified by the AR class name and initial data. | |
delete ( ) : boolean | Deletes the current record from the database. Once deleted, this object can not be saved again in the same instance. | |
deleteAll ( $criteria = null, $parameters = [] ) : integer | Delete multiple records using a criteria. | |
deleteAllByPks ( $keys ) | Alias for deleteByPk() | |
deleteByPk ( $keys ) : integer | Delete records by primary key. Usage: | |
equals ( |
Compare two records using their primary key values (all column values if table does not defined primary keys). The default uses simple == for comparison of their values. Set $strict=true for identity comparison (===). | |
find ( $criteria, $parameters = [] ) : |
Find one single record that matches the criteria. | |
findAll ( $criteria = null, $parameters = [] ) : array | Same as find() but returns an array of objects. | |
findAllByIndex ( $criteria, $fields, $values ) : array | Fetches records using the sql clause "(fields) IN (values)", where fields is an array of column names and values is an array of values that the columns must have. | |
findAllByPks ( $keys ) : array | Find multiple records matching a list of primary or composite keys. | |
findAllBySql ( $sql, array $parameters = [] ) : array | Find records using full SQL, returns corresponding record object. | |
findByPk ( $keys ) : TActiveRecord. | Find one record using only the primary key or composite primary keys. Usage: | |
findBySql ( $sql, array $parameters = [] ) : TActiveRecord, | Find records using full SQL, returns corresponding record object. | |
finder ( $className = __CLASS__ ) : |
Returns the instance of a active record finder for a particular class. | |
getActiveDbConnection ( ) | ||
getColumnValue ( $columnName ) : mixed | Retrieves the column value according to column name. | |
getDbConnection ( ) : TDbConnection | Gets the current Db connection, the connection object is obtained from the TActiveRecordManager if connection is currently null. | |
getInvalidFinderResult ( ) : |
||
getRecordGateway ( ) : |
||
getRecordManager ( ) : |
Gets the record manager for this object, the default is to call TActiveRecordManager::getInstance(). | |
getRecordRelation ( $property ) : array | ||
getRecordRelations ( ) : array | ||
getRecordTableInfo ( ) : TDbTableInfo | ||
hasRecordRelation ( $property ) : boolean | ||
onCreateCommand ( $param ) | Raised when a command is prepared and parameter binding is completed. | |
onDelete ( $param ) | Raised before the record attempt to delete its data from the database. | |
onExecuteCommand ( $param ) | Raised when a command is executed and the result from the database was returned. | |
onInsert ( $param ) | Raised before the record attempt to insert its data into the database. | |
onUpdate ( $param ) | Raised before the record attempt to update its data in the database. | |
save ( ) : boolean | Saves the current record to the database, insert or update is automatically determined. | |
setColumnValue ( $columnName, $value ) | Sets the column value according to column name. | |
setDbConnection ( $connection ) | ||
setInvalidFinderResult ( $value ) | Define the way an active record finder react if an invalid magic-finder invoked | |
toArray ( ) : array | Return record data as array | |
toJSON ( ) : JSON | Return record data as JSON |
Method | Description | |
---|---|---|
createRelationContext ( $name ) : |
Gets a static copy of the relationship context for given property (a key in $RELATIONS), returns null if invalid relationship. Keeps a null reference to all invalid relations called. | |
fetchResultsFor ( $property ) : boolean | Tries to load the relationship results for the given property. The $property value should correspond to an entry key in the $RELATION array. | |
getRecordCriteria ( $criteria, $parameters, $args = [] ) : |
Create a new TSqlCriteria object from a string $criteria. The $args are additional parameters and are used in place of the $parameters if $parameters is not an array and $args is an arrary. | |
getRelationHandler ( $name, $args = [] ) : TActiveRecordRelation, | Returns the active record relationship handler for $RELATION with key value equal to the $property value. | |
populateObject ( $data ) : |
Populates a new record with the query result. | |
populateObjects ( $reader ) : array |
Method | Description | |
---|---|---|
setupColumnMapping ( ) | ||
setupRelations ( ) |
$finder->findByName($name)
$finder->find('Name = ?', $name);
$finder->findByUsernameAndPassword($name,$pass); // OR may be used
$finder->findBy_Username_And_Password($name,$pass); // _OR_ may be used
$finder->find('Username = ? AND Password = ?', $name, $pass);
$finder->findAllByAge($age);
$finder->findAll('Age = ?', $age);
$finder->deleteAll('Name = ?', $name);
$finder->deleteByName($name);
public __construct ( $data = [], $connection = null ) |
public __set ( $name, $value ) |
public __sleep ( ) |
public __wakeup ( ) |
public static createRecord ( $type, $data ) : |
||
return | the initialized AR object. Null if the initial data is empty. |
protected createRelationContext ( $name ) : |
||
return | object containing information on the active record relationships for given property, null if invalid relationship |
$finder->deleteByPk($primaryKey); //delete 1 record
$finder->deleteByPk($key1,$key2,...); //delete multiple records
$finder->deleteByPk(array($key1,$key2,...)); //delete multiple records
For composite primary keys (determined from the table definitions):
$finder->deleteByPk(array($key1,$key2)); //delete 1 record
delete multiple records
$finder->deleteByPk(array($key1,$key2), array($key3,$key4),...);
delete multiple records
$finder->deleteByPk(array( array($key1,$key2), array($key3,$key4), .. ));
public deleteByPk ( $keys ) : integer | ||
return | integer | number of records deleted. |
class TeamRecord extends TActiveRecord
{
...
private $_players;
public static $RELATION=array
(
'players' => array(self::HAS_MANY, 'PlayerRecord'),
);
public function setPlayers($array)
{
$this->_players=$array;
}
public function getPlayers()
{
if($this->_players===null)
$this->fetchResultsFor('players');
return $this->_players;
}
}
Usage example:
$team = TeamRecord::finder()->findByPk(1);
var_dump($team->players); //uses lazy load to fetch 'players' relation
protected fetchResultsFor ( $property ) : boolean | ||
return | boolean | true if relationship exists, false otherwise. |
$finder->find('username = :name AND password = :pass',
array(':name'=>$name, ':pass'=>$pass));
$finder->find('username = ? AND password = ?', array($name, $pass));
$finder->find('username = ? AND password = ?', $name, $pass);
$criteria is of TActiveRecordCriteria
$finder->find($criteria); //the 2nd parameter for find() is ignored.
public find ( $criteria, $parameters = [] ) : |
||
return | matching record object. Null if no result is found. |
public findAllByIndex ( $criteria, $fields, $values ) : array | ||
return | array | matching active records. Empty array is returned if no result is found. |
$finder->findAllByPk($key1, $key2, ...);
$finder->findAllByPk(array($key1, $key2, ...));
For composite keys:
$finder->findAllByPk(array($key1, $key2), array($key3, $key4), ...);
$finder->findAllByPk(array(array($key1, $key2), array($key3, $key4), ...));
public findAllByPks ( $keys ) : array | ||
return | array | matching ActiveRecords. Empty array is returned if no result is found. |
public findAllBySql ( $sql, array $parameters = [] ) : array | ||
$parameters | array | |
return | array | matching active records. Empty array is returned if no result is found. |
$finder->findByPk($primaryKey);
$finder->findByPk($key1, $key2, ...);
$finder->findByPk(array($key1,$key2,...));
public findByPk ( $keys ) : TActiveRecord. | ||
return | TActiveRecord. |
public static finder ( $className = __CLASS__ ) : |
||
return | active record finder instance. |
public getColumnValue ( $columnName ) : mixed | ||
return | mixed | the corresponding column value |
public getDbConnection ( ) : TDbConnection | ||
return | TDbConnection | current db connection for this object. |
public getInvalidFinderResult ( ) : |
||
return | Defaults to '{@link TActiveRecordInvalidFinderResult::Null Null}'. |
protected getRecordCriteria ( $criteria, $parameters, $args = [] ) : |
||
return | criteria object. |
public getRecordGateway ( ) : |
||
return | record table gateway. |
public static getRecordManager ( ) : |
||
return | default active record manager. |
public getRecordRelation ( $property ) : array | ||
return | array | relation definition for the specified property |
public getRecordRelations ( ) : array | ||
return | array | all relation definitions declared in the AR class |
public getRecordTableInfo ( ) : TDbTableInfo | ||
return | TDbTableInfo | the meta information of the table associated with this AR class. |
protected getRelationHandler ( $name, $args = [] ) : TActiveRecordRelation, | ||
return | TActiveRecordRelation, |
public hasRecordRelation ( $property ) : boolean | ||
return | boolean | whether a relation is declared for the specified AR property |
public onCreateCommand ( $param ) |
public onDelete ( $param ) |
public onExecuteCommand ( $param ) |
public onInsert ( $param ) |
public onUpdate ( $param ) |
protected populateObject ( $data ) : |
||
return | object record, null if data is empty. |
protected populateObjects ( $reader ) : array | ||
return | array | the AR objects populated by the query result |
public setColumnValue ( $columnName, $value ) |
public setInvalidFinderResult ( $value ) |
public static $COLUMN_MAPPING |
public static $RELATIONS |
protected TActiveRecordInvalidFinderResult,Prado\Data\ActiveRecord $_invalidFinderResult | ||
return |