CActiveRecord
| Package |
system.db.ar |
| Inheritance |
abstract class CActiveRecord »
CModel »
CComponent |
| Implements |
ArrayAccess, Traversable, IteratorAggregate |
| Since |
1.0 |
| Version |
$Id: CActiveRecord.php 2230 2010-06-25 20:16:41Z qiang.xue $ |
CActiveRecord is the base class for classes representing relational data.
It implements the active record design pattern, a popular Object-Relational Mapping (ORM) technique.
Please check
the Guide for more details
about this class.
Protected Methods
Hide inherited methods
| Method | Description | Defined By |
| afterConstruct() |
This method is invoked after a record instance is created by new operator. |
CActiveRecord |
| afterDelete() |
This method is invoked after deleting a record. |
CActiveRecord |
| afterFind() |
This method is invoked after each record is instantiated by a find method. |
CActiveRecord |
| afterSave() |
This method is invoked after saving a record successfully. |
CActiveRecord |
| afterValidate() |
This method is invoked after validation ends. |
CModel |
| beforeDelete() |
This method is invoked before deleting a record. |
CActiveRecord |
| beforeFind() |
This method is invoked before an AR finder executes a find call. |
CActiveRecord |
| beforeSave() |
This method is invoked before saving a record (after validation, if any). |
CActiveRecord |
| beforeValidate() |
This method is invoked before validation starts. |
CModel |
| instantiate() |
Creates an active record instance. |
CActiveRecord |
Events
Hide inherited events
| Event | Description | Defined By |
| onBeforeSave |
This event is raised before the record is saved. |
CActiveRecord |
| onAfterSave |
This event is raised after the record is saved. |
CActiveRecord |
| onBeforeDelete |
This event is raised before the record is deleted. |
CActiveRecord |
| onAfterDelete |
This event is raised after the record is deleted. |
CActiveRecord |
| onAfterConstruct |
This event is raised after the record instance is created by new operator. |
CActiveRecord |
| onBeforeFind |
This event is raised before an AR finder performs a find call. |
CActiveRecord |
| onAfterFind |
This event is raised after the record is instantiated by a find method. |
CActiveRecord |
| onBeforeValidate |
This event is raised before the validation is performed. |
CModel |
| onAfterValidate |
This event is raised after the validation is performed. |
CModel |
| onUnsafeAttribute |
This method is invoked when an unsafe attribute is being massively assigned. |
CModel |
Property Details
Returns all column attribute values.
Note, related objects are not returned.
commandBuilder
the command builder used by this AR
the default database connection for all active record classes.
By default, this is the 'db' application component.
Returns the database connection used by active record.
By default, the "db" application component is used as the database connection.
You may override this method if you want to use a different database connection.
Returns the query criteria associated with this model.
whether the record is new and should be inserted when calling save.
This property is automatically set in constructor and populateRecord.
Defaults to false, but it will be set to true if the instance is created using
the new operator.
the meta for this AR class.
Returns the old primary key value.
This refers to the primary key value that is populated into the record
after executing a find method (e.g. find(), findAll()).
The value remains unchanged even if the primary key attribute is manually assigned with a different value.
the primary key value. An array (column name=>column value) is returned if the primary key is composite.
If primary key is not defined, null will be returned.
Returns the table alias to be used by the find methods.
In relational queries, the returned table alias may vary according to
the corresponding relation declaration. Also, the default table alias
set by setTableAlias may be overridden by the applied scopes.
the metadata of the table that this AR belongs to
Method Details
|
public mixed __call(string $name, array $parameters)
|
| $name |
string |
the method name |
| $parameters |
array |
method parameters |
| {return} |
mixed |
the method return value |
Calls the named method which is not a class method.
Do not call this method. This is a PHP magic method that we override
to implement the named scope feature.
|
public void __construct(string $scenario='insert')
|
| $scenario |
string |
scenario name. See CModel::scenario for more details about this parameter. |
Constructor.
|
public mixed __get(string $name)
|
| $name |
string |
property name |
| {return} |
mixed |
property value |
PHP getter magic method.
This method is overridden so that AR attributes can be accessed like properties.
|
public boolean __isset(string $name)
|
| $name |
string |
the property name or the event name |
| {return} |
boolean |
whether the property value is null |
Checks if a property value is null.
This method overrides the parent implementation by checking
if the named attribute is null or not.
|
public void __set(string $name, mixed $value)
|
| $name |
string |
property name |
| $value |
mixed |
property value |
PHP setter magic method.
This method is overridden so that AR attributes can be accessed like properties.
PHP sleep magic method.
This method ensures that the model meta data reference is set to null.
|
public void __unset(string $name)
|
| $name |
string |
the property name or the event name |
Sets a component property to be null.
This method overrides the parent implementation by clearing
the specified attribute value.
|
public void addRelatedRecord(string $name, mixed $record, mixed $index)
|
| $name |
string |
attribute name |
| $record |
mixed |
the related record |
| $index |
mixed |
the index value in the related object collection.
If true, it means using zero-based integer index.
If false, it means a HAS_ONE or BELONGS_TO object and no index is needed. |
Adds a related object to this record.
This method is used internally by CActiveFinder to populate related objects.
|
protected void afterConstruct()
|
This method is invoked after a record instance is created by new operator.
The default implementation raises the onAfterConstruct event.
You may override this method to do postprocessing after record creation.
Make sure you call the parent implementation so that the event is raised properly.
|
protected void afterDelete()
|
This method is invoked after deleting a record.
The default implementation raises the onAfterDelete event.
You may override this method to do postprocessing after the record is deleted.
Make sure you call the parent implementation so that the event is raised properly.
|
protected void afterFind()
|
This method is invoked after each record is instantiated by a find method.
The default implementation raises the onAfterFind event.
You may override this method to do postprocessing after each newly found record is instantiated.
Make sure you call the parent implementation so that the event is raised properly.
|
public void afterFindInternal()
|
Calls afterFind.
This method is internally used.
|
protected void afterSave()
|
This method is invoked after saving a record successfully.
The default implementation raises the onAfterSave event.
You may override this method to do postprocessing after record saving.
Make sure you call the parent implementation so that the event is raised properly.
Applies the query scopes to the given criteria.
This method merges dbCriteria with the given criteria parameter.
It then resets dbCriteria to be null.
|
public array attributeNames()
|
| {return} |
array |
list of attribute names. |
Returns the list of all attribute names of the model.
This would return all column names of the table associated with this AR class.
|
protected boolean beforeDelete()
|
| {return} |
boolean |
whether the record should be deleted. Defaults to true. |
This method is invoked before deleting a record.
The default implementation raises the onBeforeDelete event.
You may override this method to do any preparation work for record deletion.
Make sure you call the parent implementation so that the event is raised properly.
|
protected void beforeFind()
|
This method is invoked before an AR finder executes a find call.
The find calls include find, findAll, findByPk,
findAllByPk, findByAttributes and findAllByAttributes.
The default implementation raises the onBeforeFind event.
If you override this method, make sure you call the parent implementation
so that the event is raised properly.
|
public void beforeFindInternal()
|
Calls beforeFind.
This method is internally used.
|
protected boolean beforeSave()
|
| {return} |
boolean |
whether the saving should be executed. Defaults to true. |
This method is invoked before saving a record (after validation, if any).
The default implementation raises the onBeforeSave event.
You may override this method to do any preparation work for record saving.
Use isNewRecord to determine whether the saving is
for inserting or updating record.
Make sure you call the parent implementation so that the event is raised properly.
|
public integer count(mixed $condition='', array $params=array (
))
|
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
integer |
the number of rows satisfying the specified query condition. |
Finds the number of rows satisfying the specified query condition.
See find() for detailed explanation about $condition and $params.
|
public integer countBySql(string $sql, array $params=array (
))
|
| $sql |
string |
the SQL statement |
| $params |
array |
parameters to be bound to the SQL statement |
| {return} |
integer |
the number of rows using the given SQL statement. |
Finds the number of rows using the given SQL statement.
This is equivalent to calling CDbCommand::queryScalar with the specified
SQL statement and the parameters.
|
public array defaultScope()
|
| {return} |
array |
the query criteria. This will be used as the parameter to the constructor
of CDbCriteria. |
Returns the default named scope that should be implicitly applied to all queries for this model.
Note, default scope only applies to SELECT queries. It is ignored for INSERT, UPDATE and DELETE queries.
The default implementation simply returns an empty array. You may override this method
if the model needs to be queried with some default criteria (e.g. only active records should be returned).
|
public boolean delete()
|
| {return} |
boolean |
whether the deletion is successful. |
Deletes the row corresponding to this active record.
|
public integer deleteAll(mixed $condition='', array $params=array (
))
|
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
integer |
the number of rows deleted |
Deletes rows with the specified condition.
See find() for detailed explanation about $condition and $params.
|
public CActiveRecord deleteAllByAttributes(array $attributes, mixed $condition='', array $params=array (
))
|
| $attributes |
array |
list of attribute values (indexed by attribute names) that the active records should match.
Since version 1.0.8, an attribute value can be an array which will be used to generate an IN condition. |
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
CActiveRecord |
the record found. Null if none is found. |
Deletes rows which match the specified attribute values.
See find() for detailed explanation about $condition and $params.
|
public integer deleteByPk(mixed $pk, mixed $condition='', array $params=array (
))
|
| $pk |
mixed |
primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value). |
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
integer |
the number of rows deleted |
Deletes rows with the specified primary key.
See find() for detailed explanation about $condition and $params.
|
public boolean equals($record)
|
| $record |
|
|
| {return} |
boolean |
whether the two active records refer to the same row in the database table. |
Compares this active record with another one.
The comparison is made by comparing the primary key values of the two active records.
|
public boolean exists(mixed $condition, array $params=array (
))
|
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
boolean |
whether there is row satisfying the specified condition. |
Checks whether there is row satisfying the specified condition.
See find() for detailed explanation about $condition and $params.
|
public CActiveRecord find(mixed $condition='', array $params=array (
))
|
| $condition |
mixed |
query condition or criteria.
If a string, it is treated as query condition (the WHERE clause);
If an array, it is treated as the initial values for constructing a CDbCriteria object;
Otherwise, it should be an instance of CDbCriteria. |
| $params |
array |
parameters to be bound to an SQL statement.
This is only used when the first parameter is a string (query condition).
In other cases, please use CDbCriteria::params to set parameters. |
| {return} |
CActiveRecord |
the record found. Null if no record is found. |
Finds a single active record with the specified condition.
|
public array findAll(mixed $condition='', array $params=array (
))
|
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
array |
list of active records satisfying the specified condition. An empty array is returned if none is found. |
Finds all active records satisfying the specified condition.
See find() for detailed explanation about $condition and $params.
|
public array findAllByAttributes(array $attributes, mixed $condition='', array $params=array (
))
|
| $attributes |
array |
list of attribute values (indexed by attribute names) that the active records should match.
Since version 1.0.8, an attribute value can be an array which will be used to generate an IN condition. |
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
array |
the records found. An empty array is returned if none is found. |
Finds all active records that have the specified attribute values.
See find() for detailed explanation about $condition and $params.
|
public array findAllByPk(mixed $pk, mixed $condition='', array $params=array (
))
|
| $pk |
mixed |
primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value). |
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
array |
the records found. An empty array is returned if none is found. |
Finds all active records with the specified primary keys.
See find() for detailed explanation about $condition and $params.
|
public array findAllBySql(string $sql, array $params=array (
))
|
| $sql |
string |
the SQL statement |
| $params |
array |
parameters to be bound to the SQL statement |
| {return} |
array |
the records found. An empty array is returned if none is found. |
Finds all active records using the specified SQL statement.
|
public CActiveRecord findByAttributes(array $attributes, mixed $condition='', array $params=array (
))
|
| $attributes |
array |
list of attribute values (indexed by attribute names) that the active records should match.
Since version 1.0.8, an attribute value can be an array which will be used to generate an IN condition. |
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
CActiveRecord |
the record found. Null if none is found. |
Finds a single active record that has the specified attribute values.
See find() for detailed explanation about $condition and $params.
|
public CActiveRecord findByPk(mixed $pk, mixed $condition='', array $params=array (
))
|
| $pk |
mixed |
primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value). |
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
CActiveRecord |
the record found. Null if none is found. |
Finds a single active record with the specified primary key.
See find() for detailed explanation about $condition and $params.
|
public CActiveRecord findBySql(string $sql, array $params=array (
))
|
| $sql |
string |
the SQL statement |
| $params |
array |
parameters to be bound to the SQL statement |
| {return} |
CActiveRecord |
the record found. Null if none is found. |
Finds a single active record with the specified SQL statement.
|
|
| $name |
string |
the relation name |
| {return} |
CActiveRelation |
the named relation declared for this AR class. Null if the relation does not exist. |
|
public mixed getAttribute(string $name)
|
| $name |
string |
the attribute name |
| {return} |
mixed |
the attribute value. Null if the attribute is not set or does not exist. |
Returns the named attribute value.
If this is a new record and the attribute is not set before,
the default column value will be returned.
If this record is the result of a query and the attribute is not loaded,
null will be returned.
You may also use $this->AttributeName to obtain the attribute value.
|
public array getAttributes(mixed $names=true)
|
| $names |
mixed |
names of attributes whose value needs to be returned.
If this is true (default), then all attribute values will be returned, including
those that are not loaded from DB (null will be returned for those attributes).
If this is null, all attributes except those that are not loaded from DB will be returned. |
| {return} |
array |
attribute values indexed by attribute names. |
Returns all column attribute values.
Note, related objects are not returned.
getCommandBuilder()
|
|
| {return} |
CDbConnection |
the database connection used by active record. |
Returns the database connection used by active record.
By default, the "db" application component is used as the database connection.
You may override this method if you want to use a different database connection.
public CDbCriteria getDbCriteria(boolean $createIfNull=true)
|
| $createIfNull |
boolean |
whether to create a criteria instance if it does not exist. Defaults to true. |
| {return} |
CDbCriteria |
the query criteria that is associated with this model.
This criteria is mainly used by named scope feature to accumulate
different criteria specifications. |
Returns the query criteria associated with this model.
|
public boolean getIsNewRecord()
|
| {return} |
boolean |
whether the record is new and should be inserted when calling save.
This property is automatically set in constructor and populateRecord.
Defaults to false, but it will be set to true if the instance is created using
the new operator. |
|
public mixed getOldPrimaryKey()
|
| {return} |
mixed |
the old primary key value. An array (column name=>column value) is returned if the primary key is composite.
If primary key is not defined, null will be returned. |
Returns the old primary key value.
This refers to the primary key value that is populated into the record
after executing a find method (e.g. find(), findAll()).
The value remains unchanged even if the primary key attribute is manually assigned with a different value.
|
public mixed getPrimaryKey()
|
| {return} |
mixed |
the primary key value. An array (column name=>column value) is returned if the primary key is composite.
If primary key is not defined, null will be returned. |
|
public mixed getRelated(string $name, boolean $refresh=false, array $params=array (
))
|
| $name |
string |
the relation name (see relations) |
| $refresh |
boolean |
whether to reload the related objects from database. Defaults to false. |
| $params |
array |
additional parameters that customize the query conditions as specified in the relation declaration.
This parameter has been available since version 1.0.5. |
| {return} |
mixed |
the related object(s). |
Returns the related record(s).
This method will return the related record(s) of the current record.
If the relation is HAS_ONE or BELONGS_TO, it will return a single object
or null if the object does not exist.
If the relation is HAS_MANY or MANY_MANY, it will return an array of objects
or an empty array.
|
public string getTableAlias(boolean $quote=false, boolean $checkScopes=true)
|
| $quote |
boolean |
whether to quote the alias name |
| $checkScopes |
boolean |
whether to check if a table alias is defined in the applied scopes so far.
This parameter must be set false when calling this method in defaultScope.
An infinite loop would be formed otherwise. |
| {return} |
string |
the default table alias |
Returns the table alias to be used by the find methods.
In relational queries, the returned table alias may vary according to
the corresponding relation declaration. Also, the default table alias
set by setTableAlias may be overridden by the applied scopes.
|
|
| {return} |
CDbTableSchema |
the metadata of the table that this AR belongs to |
|
public boolean hasAttribute(string $name)
|
| $name |
string |
attribute name |
| {return} |
boolean |
whether this AR has the named attribute (table column). |
|
public booolean hasRelated(string $name)
|
| $name |
string |
the relation name |
| {return} |
booolean |
a value indicating whether the named related object(s) has been loaded. |
Returns a value indicating whether the named related object(s) has been loaded.
Initializes this model.
This method is invoked when an AR instance is newly created and has
its scenario set.
You may override this method to provide code that is needed to initialize the model (e.g. setting
initial property values.)
|
public boolean insert(array $attributes=NULL)
|
| $attributes |
array |
list of attributes that need to be saved. Defaults to null,
meaning all attributes that are loaded from DB will be saved. |
| {return} |
boolean |
whether the attributes are valid and the record is inserted successfully. |
Inserts a row into the table based on this active record attributes.
If the table's primary key is auto-incremental and is null before insertion,
it will be populated with the actual value after insertion.
Note, validation is not performed in this method. You may call validate to perform the validation.
After the record is inserted to DB successfully, its isNewRecord property will be set false,
and its scenario property will be set to be 'update'.
|
protected CActiveRecord instantiate(array $attributes)
|
| $attributes |
array |
list of attribute values for the active records. |
| {return} |
CActiveRecord |
the active record |
Creates an active record instance.
This method is called by populateRecord and populateRecords.
You may override this method if the instance being created
depends the attributes that are to be populated to the record.
For example, by creating a record based on the value of a column,
you may implement the so-called single-table inheritance mapping.
|
public static CActiveRecord model(string $className='CActiveRecord')
|
| $className |
string |
active record class name. |
| {return} |
CActiveRecord |
active record model instance. |
Returns the static model of the specified AR class.
The model returned is a static instance of the AR class.
It is provided for invoking class-level methods (something similar to static class methods.)
EVERY derived AR class must override this method as follows,
public static function model($className=__CLASS__)
{
return parent::model($className);
}
|
public boolean offsetExists(mixed $offset)
|
| $offset |
mixed |
the offset to check on |
| {return} |
boolean |
|
Returns whether there is an element at the specified offset.
This method is required by the interface ArrayAccess.
public void onAfterConstruct( CEvent $event)
|
| $event |
CEvent |
the event parameter |
This event is raised after the record instance is created by new operator.
public void onAfterDelete( CEvent $event)
|
| $event |
CEvent |
the event parameter |
This event is raised after the record is deleted.
public void onAfterFind( CEvent $event)
|
| $event |
CEvent |
the event parameter |
This event is raised after the record is instantiated by a find method.
public void onAfterSave( CEvent $event)
|
| $event |
CEvent |
the event parameter |
This event is raised after the record is saved.
public void onBeforeDelete( CEvent $event)
|
| $event |
CEvent |
the event parameter |
This event is raised before the record is deleted.
public void onBeforeFind( CEvent $event)
|
| $event |
CEvent |
the event parameter |
This event is raised before an AR finder performs a find call.
public void onBeforeSave( CEvent $event)
|
| $event |
CEvent |
the event parameter |
This event is raised before the record is saved.
|
public CActiveRecord populateRecord(array $attributes, boolean $callAfterFind=true)
|
| $attributes |
array |
attribute values (column name=>column value) |
| $callAfterFind |
boolean |
whether to call afterFind after the record is populated.
This parameter is added in version 1.0.3. |
| {return} |
CActiveRecord |
the newly created active record. The class of the object is the same as the model class.
Null is returned if the input data is false. |
Creates an active record with the given attributes.
This method is internally used by the find methods.
|
public array populateRecords(array $data, boolean $callAfterFind=true)
|
| $data |
array |
list of attribute values for the active records. |
| $callAfterFind |
boolean |
whether to call afterFind after each record is populated.
This parameter is added in version 1.0.3. |
| {return} |
array |
list of active records. |
Creates a list of active records based on the input data.
This method is internally used by the find methods.
|
public mixed primaryKey()
|
| {return} |
mixed |
the primary key of the associated database table.
If the key is a single column, it should return the column name;
If the key is a composite one consisting of several columns, it should
return the array of the key column names. |
Returns the primary key of the associated database table.
This method is meant to be overridden in case when the table is not defined with a primary key
(for some legency database). If the table is already defined with a primary key,
you do not need to override this method. The default implementation simply returns null,
meaning using the primary key defined in the database.
|
public boolean refresh()
|
| {return} |
boolean |
whether the row still exists in the database. If true, the latest data will be populated to this active record. |
Repopulates this active record with the latest data.
|
public void refreshMetaData()
|
Refreshes the meta data for this AR class.
By calling this method, this AR class will regenerate the meta data needed.
This is useful if the table schema has been changed and you want to use the latest
available table schema. Make sure you have called CDbSchema::refresh
before you call this method. Otherwise, old table schema data will still be used.
|
public array relations()
|
| {return} |
array |
list of related object declarations. Defaults to empty array. |
This method should be overridden to declare related objects.
There are four types of relations that may exist between two active record objects:
- BELONGS_TO: e.g. a member belongs to a team;
- HAS_ONE: e.g. a member has at most one profile;
- HAS_MANY: e.g. a team has many members;
- MANY_MANY: e.g. a member has many skills and a skill belongs to a member.
Besides the above relation types, a special relation called STAT is also supported
that can be used to perform statistical query (or aggregational query).
It retrieves the aggregational information about the related objects, such as the number
of comments for each post, the average rating for each product, etc.
Each kind of related objects is defined in this method as an array with the following elements:
'varName'=>array('relationType', 'className', 'foreign_key', ...additional options)
where 'varName' refers to the name of the variable/property that the related object(s) can
be accessed through; 'relationType' refers to the type of the relation, which can be one of the
following four constants: self::BELONGS_TO, self::HAS_ONE, self::HAS_MANY and self::MANY_MANY;
'className' refers to the name of the active record class that the related object(s) is of;
and 'foreign_key' states the foreign key that relates the two kinds of active record.
Note, for composite foreign keys, they must be listed together, separating with space or comma;
and for foreign keys used in MANY_MANY relation, the joining table must be declared as well
(e.g. 'join_table(fk1, fk2)').
Additional options may be specified as name-value pairs in the rest array elements:
- 'select': string|array, a list of columns to be selected. Defaults to '*', meaning all columns.
Column names should be disambiguated if they appear in an expression (e.g. COUNT(relationName.name) AS name_count).
- 'condition': string, the WHERE clause. Defaults to empty. Note, column references need to
be disambiguated with prefix 'relationName.' (e.g. relationName.age>20)
- 'order': string, the ORDER BY clause. Defaults to empty. Note, column references need to
be disambiguated with prefix 'relationName.' (e.g. relationName.age DESC)
- 'with': string|array, a list of child related objects that should be loaded together with this object.
Note, this is only honored by lazy loading, not eager loading.
- 'joinType': type of join. Defaults to 'LEFT OUTER JOIN'.
- 'alias': the alias for the table associated with this relationship.
This option has been available since version 1.0.1. It defaults to null,
meaning the table alias is the same as the relation name.
- 'params': the parameters to be bound to the generated SQL statement.
This should be given as an array of name-value pairs. This option has been
available since version 1.0.3.
- 'on': the ON clause. The condition specified here will be appended
to the joining condition using the AND operator. This option has been
available since version 1.0.2.
- 'index': the name of the column whose values should be used as keys
of the array that stores related objects. This option is only available to
HAS_MANY and MANY_MANY relations. This option has been available since version 1.0.7.
The following options are available for certain relations when lazy loading:
- 'group': string, the GROUP BY clause. Defaults to empty. Note, column references need to
be disambiguated with prefix 'relationName.' (e.g. relationName.age). This option only applies to HAS_MANY and MANY_MANY relations.
- 'having': string, the HAVING clause. Defaults to empty. Note, column references need to
be disambiguated with prefix 'relationName.' (e.g. relationName.age). This option only applies to HAS_MANY and MANY_MANY relations.
- 'limit': limit of the rows to be selected. This option does not apply to BELONGS_TO relation.
- 'offset': offset of the rows to be selected. This option does not apply to BELONGS_TO relation.
Below is an example declaring related objects for 'Post' active record class:
return array(
'author'=>array(self::BELONGS_TO, 'User', 'author_id'),
'comments'=>array(self::HAS_MANY, 'Comment', 'post_id', 'with'=>'author', 'order'=>'create_time DESC'),
'tags'=>array(self::MANY_MANY, 'Tag', 'post_tag(post_id, tag_id)', 'order'=>'name'),
);
|
public CActiveRecord resetScope()
|
| {return} |
CActiveRecord |
|
Resets all scopes and criterias applied including default scope.
|
public boolean save(boolean $runValidation=true, array $attributes=NULL)
|
| $runValidation |
boolean |
whether to perform validation before saving the record.
If the validation fails, the record will not be saved to database. |
| $attributes |
array |
list of attributes that need to be saved. Defaults to null,
meaning all attributes that are loaded from DB will be saved. |
| {return} |
boolean |
whether the saving succeeds |
Saves the current record.
The record is inserted as a row into the database table if its isNewRecord
property is true (usually the case when the record is created using the 'new'
operator). Otherwise, it will be used to update the corresponding row in the table
(usually the case if the record is obtained using one of those 'find' methods.)
Validation will be performed before saving the record. If the validation fails,
the record will not be saved. You can call getErrors() to retrieve the
validation errors.
If the record is saved via insertion, its isNewRecord property will be
set false, and its scenario property will be set to be 'update'.
And if its primary key is auto-incremental and is not set before insertion,
the primary key will be populated with the automatically generated key value.
|
public boolean saveAttributes(array $attributes)
|
| $attributes |
array |
attributes to be updated. Each element represents an attribute name
or an attribute value indexed by its name. If the latter, the record's
attribute will be changed accordingly before saving. |
| {return} |
boolean |
whether the update is successful |
Saves a selected list of attributes.
Unlike save, this method only saves the specified attributes
of an existing row dataset and does NOT call either beforeSave or afterSave.
Also note that this method does neither attribute filtering nor validation.
So do not use this method with untrusted data (such as user posted data).
You may consider the following alternative if you want to do so:
$postRecord=Post::model()->findByPk($postID);
$postRecord->attributes=$_POST['post'];
$postRecord->save();
|
public array scopes()
|
| {return} |
array |
the scope definition. The array keys are scope names; the array
values are the corresponding scope definitions. Each scope definition is represented
as an array whose keys must be properties of CDbCriteria. |
Returns the declaration of named scopes.
A named scope represents a query criteria that can be chained together with
other named scopes and applied to a query. This method should be overridden
by child classes to declare named scopes for the particular AR classes.
For example, the following code declares two named scopes: 'recently' and
'published'.
return array(
'published'=>array(
'condition'=>'status=1',
),
'recently'=>array(
'order'=>'create_time DESC',
'limit'=>5,
),
);
If the above scopes are declared in a 'Post' model, we can perform the following
queries:
$posts=Post::model()->published()->findAll();
$posts=Post::model()->published()->recently()->findAll();
$posts=Post::model()->published()->with('comments')->findAll();
Note that the last query is a relational query.
|
public boolean setAttribute(string $name, mixed $value)
|
| $name |
string |
the attribute name |
| $value |
mixed |
the attribute value. |
| {return} |
boolean |
whether the attribute exists and the assignment is conducted successfully |
Sets the named attribute value.
You may also use $this->AttributeName to set the attribute value.
Sets the query criteria for the current model.
|
public void setIsNewRecord(boolean $value)
|
| $value |
boolean |
whether the record is new and should be inserted when calling save. |
|
public void setOldPrimaryKey(mixed $value)
|
| $value |
mixed |
the old primary key value. |
Sets the old primary key value.
|
public void setPrimaryKey(mixed $value)
|
| $value |
mixed |
the new primary key value. If the primary key is composite, the new value
should be provided as an array (column name=>column value). |
Sets the primary key value.
After calling this method, the old primary key value can be obtained from oldPrimaryKey.
|
public void setTableAlias(string $alias)
|
| $alias |
string |
the table alias to be used in queries. The alias should NOT be quoted. |
Sets the table alias to be used in queries.
|
public string tableName()
|
| {return} |
string |
the table name |
Returns the name of the associated database table.
By default this method returns the class name as the table name.
You may override this method if the table is not named after this convention.
|
public boolean update(array $attributes=NULL)
|
| $attributes |
array |
list of attributes that need to be saved. Defaults to null,
meaning all attributes that are loaded from DB will be saved. |
| {return} |
boolean |
whether the update is successful |
Updates the row represented by this active record.
All loaded attributes will be saved to the database.
Note, validation is not performed in this method. You may call validate to perform the validation.
|
public integer updateAll(array $attributes, mixed $condition='', array $params=array (
))
|
| $attributes |
array |
list of attributes (name=>$value) to be updated |
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
integer |
the number of rows being updated |
Updates records with the specified condition.
See find() for detailed explanation about $condition and $params.
Note, the attributes are not checked for safety and no validation is done.
|
public integer updateByPk(mixed $pk, array $attributes, mixed $condition='', array $params=array (
))
|
| $pk |
mixed |
primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value). |
| $attributes |
array |
list of attributes (name=>$value) to be updated |
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
integer |
the number of rows being updated |
Updates records with the specified primary key(s).
See find() for detailed explanation about $condition and $params.
Note, the attributes are not checked for safety and validation is NOT performed.
|
public integer updateCounters(array $counters, mixed $condition='', array $params=array (
))
|
| $counters |
array |
the counters to be updated (column name=>increment value) |
| $condition |
mixed |
query condition or criteria. |
| $params |
array |
parameters to be bound to an SQL statement. |
| {return} |
integer |
the number of rows being updated |
Updates one or several counter columns.
Note, this updates all rows of data unless a condition or criteria is specified.
See find() for detailed explanation about $condition and $params.
|
|
| {return} |
CActiveFinder |
the active finder instance. If no parameter is passed in, the object itself will be returned. |
Specifies which related objects should be eagerly loaded.
This method takes variable number of parameters. Each parameter specifies
the name of a relation or child-relation. For example,
// find all posts together with their author and comments
Post::model()->with('author','comments')->findAll();
// find all posts together with their author and the author's profile
Post::model()->with('author','author.profile')->findAll();
The relations should be declared in
relations().
By default, the options specified in
relations() will be used
to do relational query. In order to customize the options on the fly,
we should pass an array parameter to the with() method. The array keys
are relation names, and the array values are the corresponding query options.
For example,
Post::model()->with(array(
'author'=>array('select'=>'id, name'),
'comments'=>array('condition'=>'approved=1', 'order'=>'create_time'),
))->findAll();
This method returns a
CActiveFinder instance that provides
a set of find methods similar to that of CActiveRecord.
Note, the possible parameters to this method have been changed since version 1.0.2.
Previously, it was not possible to specify on-th-fly query options,
and child-relations were specified as hierarchical arrays.
Note that
with()supports simple (non-parameterized) named scopes - for example, to select recent posts by active authors (assumingPosthas a scope namedrecent, andAuthorhas a scope namedactive), you can do this:Post::model()->recent()->with('author:active')->findAll();It is important to understand that once you call
with(), you break the call-chain - you have left model-land and entered relational query land.That is, you are no longer working with the static
CActiveRecordinstance returned bymodel(), but rather, any chained calls afterwith()are working on aCActiveFinderinstance.That is why you must always call
with()after you have called any other scope-methods - the reason you can still callfindAll()and other methods afterwith(), is that you are actually calling a different method, namelyCActiveFinder::findAll(), rather thanCActiveRecord::findAll()- while these have identical names and APIs, they are two different methods belonging to different objects.Also note the limitation of named scopes using the
with('x:y')syntax - this works only with simple scopes, defined using thescopes()callback method; it does not work with parameterized scopes defined by adding methods to your model.