CActiveRecord

优质
小牛编辑
134浏览
2023-12-01
所有包 | 属性 | 方法 | 事件
system.db.ar
继承abstract class CActiveRecord » CModel » CComponent
实现ArrayAccess, Traversable, IteratorAggregate
源自1.0
版本$Id: CActiveRecord.php 3533 2012-01-08 22:07:55Z mdomba $
源码framework/db/ar/CActiveRecord.php
CActiveRecord代表关系数据的类的基类。

它实现了活动记录设计模式,一种流行的对象关系映射(ORM)技术。 请点击the Guide更多关于这个类的 详细信息。

公共属性

隐藏继承属性

属性类型描述定义在
attributesarray返回所有列的属性值。CActiveRecord
commandBuilderCDbCommandBuilder返回此AR的命令生成器。CActiveRecord
dbCDbConnection所有活动记录类的默认数据库连接。 默认情况下,这是'db'应用程序组件,CActiveRecord
dbConnectionCDbConnection返回活动记录所使用的数据库连接。CActiveRecord
dbCriteriaCDbCriteria返回和这个模型相关的查询条件。CActiveRecord
errorsarrayReturns the errors for all attribute or a single attribute.CModel
isNewRecordboolean返回当前记录是否是新的。CActiveRecord
iteratorCMapIteratorReturns an iterator for traversing the attributes in the model.CModel
metaDataCActiveRecordMetaData返回这个AR的元数据。CActiveRecord
oldPrimaryKeymixed返回旧的主键值。CActiveRecord
primaryKeymixed返回主键值。CActiveRecord
safeAttributeNamesarrayReturns the attribute names that are safe to be massively assigned.CModel
scenariostringReturns the scenario that this model is used in.CModel
tableAliasstring返回由 find 方法使用表的别名。CActiveRecord
tableSchemaCDbTableSchema返回表的元数据,这属于AR类。CActiveRecord
validatorListCListReturns all the validators declared in the model.CModel
validatorsarrayReturns the validators applicable to the current scenario.CModel

公共方法

隐藏继承方法

方法描述定义在
__call()回调的命名方法。CActiveRecord
__construct()构造函数。CActiveRecord
__get()PHP getter 魔术方法。CActiveRecord
__isset()检测一个属性值是否为null。CActiveRecord
__set()PHP setter 魔术方法。CActiveRecord
__sleep()PHP sleep 魔术方法。CActiveRecord
__unset()检查属性值是否为空。CActiveRecord
addError()Adds a new error to the specified attribute.CModel
addErrors()Adds a list of errors.CModel
addRelatedRecord()不调用此方法。此方法用于内部CActiveFinder来填充相关的对象。CActiveRecord
afterFindInternal()调用afterFind。CActiveRecord
applyScopes()适用于给定条件的查询范围。CActiveRecord
asa()返回这个名字的行为对象。CComponent
attachBehavior()附加一个行为到组件。CComponent
attachBehaviors()附加一个行为列表到组件。CComponent
attachEventHandler()为事件附加一个事件处理程序。CComponent
attributeLabels()Returns the attribute labels.CModel
attributeNames()返回模型的所有属性名称的列表。CActiveRecord
beforeFindInternal()调用beforeFind。CActiveRecord
behaviors()Returns a list of behaviors that this model should behave as.CModel
cache()设置关于查询缓存的参数.CActiveRecord
canGetProperty()确定属性是否可读。CComponent
canSetProperty()确定属性是否可写。CComponent
clearErrors()Removes errors for all attributes or a single attribute.CModel
count()查找满足指定查询条件的行数。CActiveRecord
countByAttributes()查找具有指定的属性值的行数。CActiveRecord
countBySql()查找指定SQL语句影响的行数。CActiveRecord
createValidators()Creates validator objects based on the specification in rules.CModel
defaultScope()返回默认的命名范围,应隐含这种模式适用于所有查询。CActiveRecord
delete()删除对应于此活动记录的行。CActiveRecord
deleteAll()删除指定条件的行。CActiveRecord
deleteAllByAttributes()删除指定的属性值相匹配的行。CActiveRecord
deleteByPk()删除指定主键的行。CActiveRecord
detachBehavior()从组件中分离一个行为。CComponent
detachBehaviors()从组件中分离所有行为。CComponent
detachEventHandler()分离一个存在的事件处理程序。CComponent
disableBehavior()禁用一个附加行为。CComponent
disableBehaviors()禁用组件附加的所有行为。CComponent
enableBehavior()启用一个附加行为。CComponent
enableBehaviors()启用组件附加的所有行为。CComponent
equals()当前活动记录与另一个比较。CActiveRecord
evaluateExpression()计算一个PHP表达式,或根据组件上下文执行回调。CComponent
exists()检查是否满足指定条件的行。CActiveRecord
find()查找指定条件的单个活动记录。CActiveRecord
findAll()查找满足指定条件的所有活动记录。CActiveRecord
findAllByAttributes()查找具有指定属性值的所有活动记录。CActiveRecord
findAllByPk()查找指定主键的所有活动记录。CActiveRecord
findAllBySql()查找指定SQL语句的所有活动记录。CActiveRecord
findByAttributes()查找具有指定属性值的单个活动记录。CActiveRecord
findByPk()查找指定主键的单一活动记录。CActiveRecord
findBySql()查找指定SQL语句的单个活动记录。CActiveRecord
generateAttributeLabel()Generates a user friendly attribute label.CModel
getActiveRelation()返回此AR类声明的命名关系。CActiveRecord
getAttribute()返回命名的属性值。CActiveRecord
getAttributeLabel()返回指定属性的文本标签。CActiveRecord
getAttributes()返回所有列的属性值。CActiveRecord
getCommandBuilder()返回此AR的命令生成器。CActiveRecord
getDbConnection()返回活动记录所使用的数据库连接。CActiveRecord
getDbCriteria()返回和这个模型相关的查询条件。CActiveRecord
getError()Returns the first error of the specified attribute.CModel
getErrors()Returns the errors for all attribute or a single attribute.CModel
getEventHandlers()返回一个事件的附加处理程序列表。CComponent
getIsNewRecord()返回当前记录是否是新的。CActiveRecord
getIterator()Returns an iterator for traversing the attributes in the model.CModel
getMetaData()返回这个AR的元数据。CActiveRecord
getOldPrimaryKey()返回旧的主键值。CActiveRecord
getPrimaryKey()返回主键值。CActiveRecord
getRelated()返回相关的记录。CActiveRecord
getSafeAttributeNames()Returns the attribute names that are safe to be massively assigned.CModel
getScenario()Returns the scenario that this model is used in.CModel
getTableAlias()返回由 find 方法使用表的别名。CActiveRecord
getTableSchema()返回表的元数据,这属于AR类。CActiveRecord
getValidatorList()Returns all the validators declared in the model.CModel
getValidators()Returns the validators applicable to the current scenario.CModel
hasAttribute()检查此AR是否有命名的属性。CActiveRecord
hasErrors()Returns a value indicating whether there is any validation error.CModel
hasEvent()确定一个事件是否定义。CComponent
hasEventHandler()检查事件是否有附加的处理程序。CComponent
hasProperty()确定属性是否被定义。CComponent
hasRelated()返回一个值,该值指示是否已加载命名的相关对象。CActiveRecord
init()初始化这个模型。CActiveRecord
insert()插入一行到基于这个ActiveRecord的属性表。CActiveRecord
isAttributeRequired()Returns a value indicating whether the attribute is required.CModel
isAttributeSafe()Returns a value indicating whether the attribute is safe for massive assignments.CModel
model()返回指定AR类的静态模型。CActiveRecord
offsetExists()返回是否有指定偏移量的元素。CActiveRecord
offsetGet()Returns the element at the specified offset.CModel
offsetSet()Sets the element at the specified offset.CModel
offsetUnset()Unsets the element at the specified offset.CModel
onAfterConstruct()This event is raised after the model instance is created by new operator.CModel
onAfterDelete()在删除记录之后,将引发此事件。CActiveRecord
onAfterFind()引发此事件记录后找到方法的实例。CActiveRecord
onAfterSave()保存记录之后,将引发此事件。CActiveRecord
onAfterValidate()This event is raised after the validation is performed.CModel
onBeforeDelete()在删除记录之前,将引发此事件。CActiveRecord
onBeforeFind()AR finder执行查找调用之前,将引发此事件。CActiveRecord
onBeforeSave()保存记录之前,将引发此事件。CActiveRecord
onBeforeValidate()This event is raised before the validation is performed.CModel
onUnsafeAttribute()This method is invoked when an unsafe attribute is being massively assigned.CModel
populateRecord()给指定的属性创建活动记录CActiveRecord
populateRecords()创建基于输入数据的活动记录的列表。CActiveRecord
primaryKey()返回相关数据库表的主键。CActiveRecord
raiseEvent()发起一个事件。CComponent
refresh()最新的数据将被填充到这个活动记录。CActiveRecord
refreshMetaData()刷新这个AR类的元数据。CActiveRecord
relations()申明关系的对象,应重写此方法。CActiveRecord
resetScope()重置所有变量作用域,包括默认的范围。CActiveRecord
rules()Returns the validation rules for attributes.CModel
save()保存当前的记录。CActiveRecord
saveAttributes()保存所选的属性列表。CActiveRecord
saveCounters()保存一个或多当前AR对象到计数器。CActiveRecord
scopes()返回申明的命名范围。CActiveRecord
setAttribute()设置命名的属性值。CActiveRecord
setAttributes()Sets the attribute values in a massive way.CModel
setDbCriteria()为当前模型设置查询条件.CActiveRecord
setIsNewRecord()设置记录是否是新的。CActiveRecord
setOldPrimaryKey()设置旧的主键值。CActiveRecord
setPrimaryKey()设置主键值。CActiveRecord
setScenario()Sets the scenario for the model.CModel
setTableAlias()设置表在查询中使用的别名。CActiveRecord
tableName()返回关联的数据库表的名称。CActiveRecord
together()设置CDbCriteria::together属性为true。CActiveRecord
unsetAttributes()Sets the attributes to be null.CModel
update()更新此活动记录所表示的行。CActiveRecord
updateAll()更新使用指定条件的记录。CActiveRecord
updateByPk()更新指定主键记录的行。CActiveRecord
updateCounters()更新的一个或多个计数器。CActiveRecord
validate()Performs the validation.CModel
with()指定相关对象应一起载入。CActiveRecord

受保护方法

隐藏继承方法

方法描述定义在
afterConstruct()This method is invoked after a model instance is created by new operator.CModel
afterDelete()删除记录之后调用此方法。CActiveRecord
afterFind()每个记录由 find 方法实例化后,将调用此方法。CActiveRecord
afterSave()记录被成功保存后,调用此方法。CActiveRecord
afterValidate()This method is invoked after validation ends.CModel
beforeDelete()在删除记录之前调用此方法。CActiveRecord
beforeFind()AR finder执行查找调用之前,将引发此事件。CActiveRecord
beforeSave()保存记录之前,调用这个方法(验证后,如果有的话)。CActiveRecord
beforeValidate()This method is invoked before validation starts.CModel
instantiate()创建活动记录实例。CActiveRecord
query()执行实际的数据库查询和填充AR对象的查询结果。CActiveRecord

事件

隐藏继承事件

事件描述定义在
onBeforeSave保存记录之前,将引发此事件。CActiveRecord
onAfterSave保存记录之后,将引发此事件。CActiveRecord
onBeforeDelete在删除记录之前,将引发此事件。CActiveRecord
onAfterDelete在删除记录之后,将引发此事件。CActiveRecord
onBeforeFindAR finder执行查找调用之前,将引发此事件。CActiveRecord
onAfterFind引发此事件记录后找到方法的实例。CActiveRecord
onAfterConstructThis event is raised after the model instance is created by new operator.CModel
onBeforeValidateThis event is raised before the validation is performed.CModel
onAfterValidateThis event is raised after the validation is performed.CModel
onUnsafeAttributeThis method is invoked when an unsafe attribute is being massively assigned.CModel

属性详细

attributes 属性 public array getAttributes(mixed $names=true)
public void setAttributes(array $values, boolean $safeOnly=true)

返回所有列的属性值。 注意,不返回相关的对象。

commandBuilder 属性 只读 public CDbCommandBuilder getCommandBuilder()

返回此AR的命令生成器。

db 属性 public static CDbConnection $db;

所有活动记录类的默认数据库连接。 默认情况下,这是'db'应用程序组件,

参见

  • getDbConnection
dbConnection 属性 只读 public CDbConnection getDbConnection()

返回活动记录所使用的数据库连接。 默认情况下,"db"应用程序组件用作数据库连接。 如果您要使用一个不同的数据库连接,您可以重写此方法。

dbCriteria 属性 public CDbCriteria getDbCriteria(boolean $createIfNull=true)
public void setDbCriteria(CDbCriteria $criteria)

返回和这个模型相关的查询条件。

isNewRecord 属性 public boolean getIsNewRecord()
public void setIsNewRecord(boolean $value)

返回当前记录是否是新的。

metaData 属性 只读 public CActiveRecordMetaData getMetaData()

返回这个AR的元数据。

oldPrimaryKey 属性 (可用自 v1.1.0) public mixed getOldPrimaryKey()
public void setOldPrimaryKey(mixed $value)

返回旧的主键值。 这指的是主键值已填充到记录后, 执行查找方法 (例如: find(),findAll()), 即使主关键属性都会被手动分配一个不同的值,值保持不变。

primaryKey 属性 public mixed getPrimaryKey()
public void setPrimaryKey(mixed $value)

返回主键值。

tableAlias 属性 (可用自 v1.1.1) public string getTableAlias(boolean $quote=false, boolean $checkScopes=true)
public void setTableAlias(string $alias)

返回由 find 方法使用表的别名。 在关系查询,根据对应关系的声明, 返回的表的别名可能会有所不同。 此外,由setTableAlias可以由应用的范围覆盖。

tableSchema 属性 只读 public CDbTableSchema getTableSchema()

返回表的元数据,这属于AR类。

方法详细

__call() 方法
public mixed __call(string $name, array $parameters)
$namestring方法名
$parametersarray方法参数
{return}mixed此方法返回值
源码: framework/db/ar/CActiveRecord.php#209 (显示) publicfunction__call($name,$parameters)
{
if(isset($this->getMetaData()->relations[$name]))
{
if(empty($parameters))
return$this->getRelated($name,false);
else
return$this->getRelated($name,false,$parameters[0]);
}

$scopes=$this->scopes();
if(isset($scopes[$name]))
{
$this->getDbCriteria()->mergeWith($scopes[$name]);
return$this;
}

returnparent::__call($name,$parameters);
}

回调的命名方法。 请不要调用它,它不是类的方法。 这是我们重写一个PHP魔术方法实现了这个命名范围的功能。

__construct() 方法
public void __construct(string $scenario='insert')
$scenariostring场景名。参见CModel::scenario关于这个参数的更多信息。
源码: framework/db/ar/CActiveRecord.php#71 (显示) publicfunction__construct($scenario='insert')
{
if($scenario===null)//internallyusedbypopulateRecord()andmodel()
return;

$this->setScenario($scenario);
$this->setIsNewRecord(true);
$this->_attributes=$this->getMetaData()->attributeDefaults;

$this->init();

$this->attachBehaviors($this->behaviors());
$this->afterConstruct();
}

构造函数。

__get() 方法
public mixed __get(string $name)
$namestring属性名
{return}mixed属性值
源码: framework/db/ar/CActiveRecord.php#133 (显示) publicfunction__get($name)
{
if(isset($this->_attributes[$name]))
return$this->_attributes[$name];
elseif(isset($this->getMetaData()->columns[$name]))
returnnull;
elseif(isset($this->_related[$name]))
return$this->_related[$name];
elseif(isset($this->getMetaData()->relations[$name]))
return$this->getRelated($name);
else
returnparent::__get($name);
}

PHP getter 魔术方法。 重写此方法,以便AR属性能像属性那样访问。

参见

  • getAttribute
__isset() 方法
public boolean __isset(string $name)
$namestring属性名或事件名
{return}boolean是否属性值为null
源码: framework/db/ar/CActiveRecord.php#171 (显示) publicfunction__isset($name)
{
if(isset($this->_attributes[$name]))
returntrue;
elseif(isset($this->getMetaData()->columns[$name]))
returnfalse;
elseif(isset($this->_related[$name]))
returntrue;
elseif(isset($this->getMetaData()->relations[$name]))
return$this->getRelated($name)!==null;
else
returnparent::__isset($name);
}

检测一个属性值是否为null。 通过检测,如果命令属性为空或不存在, 此方法重写父类。

__set() 方法
public void __set(string $name, mixed $value)
$namestring属性名
$valuemixed属性值
源码: framework/db/ar/CActiveRecord.php#153 (显示) publicfunction__set($name,$value)
{
if($this->setAttribute($name,$value)===false)
{
if(isset($this->getMetaData()->relations[$name]))
$this->_related[$name]=$value;
else
parent::__set($name,$value);
}
}

PHP setter 魔术方法。 重写此方法,以便AR属性能像属性那样访问。

__sleep() 方法
public array __sleep()
{return}array
源码: framework/db/ar/CActiveRecord.php#120 (显示) publicfunction__sleep()
{
$this->_md=null;
returnarray_keys((array)$this);
}

PHP sleep 魔术方法。 此方法确保模型元数据引用被设置为 null。

__unset() 方法
public void __unset(string $name)
$namestring属性名或事件名
源码: framework/db/ar/CActiveRecord.php#191 (显示) publicfunction__unset($name)
{
if(isset($this->getMetaData()->columns[$name]))
unset($this->_attributes[$name]);
elseif(isset($this->getMetaData()->relations[$name]))
unset($this->_related[$name]);
else
parent::__unset($name);
}

检查属性值是否为空。 通过检测,如果命令属性为空或不存在, 此方法重写父类。

addRelatedRecord() 方法
public void addRelatedRecord(string $name, mixed $record, mixed $index)
$namestring属性名称
$recordmixed相关的记录
$indexmixed相关对象集合中的索引值。 如果true,这意味着使用从零开始的整数索引。 如果false,它意味着HAS_ONE或BELONGS_TO对象和索引不需要。
源码: framework/db/ar/CActiveRecord.php#708 (显示) publicfunctionaddRelatedRecord($name,$record,$index)
{
if($index!==false)
{
if(!isset($this->_related[$name]))
$this->_related[$name]=array();
if($recordinstanceofCActiveRecord)
{
if($index===true)
$this->_related[$name][]=$record;
else
$this->_related[$name][$index]=$record;
}
}
elseif(!isset($this->_related[$name]))
$this->_related[$name]=$record;
}

不调用此方法。此方法用于内部CActiveFinder来填充相关的对象。 此方法添加到此记录的相关的对象。

afterDelete() 方法
protected void afterDelete()
源码: framework/db/ar/CActiveRecord.php#933 (显示) protectedfunctionafterDelete()
{
if($this->hasEventHandler('onAfterDelete'))
$this->onAfterDelete(newCEvent($this));
}

删除记录之后调用此方法。 这个默认执行引发onAfterDelete事件。 您可以重写此方法,在记录被删除后做处理。 请确保您调用父实例,以便正确地引发该事件。

afterFind() 方法
protected void afterFind()
源码: framework/db/ar/CActiveRecord.php#968 (显示) protectedfunctionafterFind()
{
if($this->hasEventHandler('onAfterFind'))
$this->onAfterFind(newCEvent($this));
}

每个记录由 find 方法实例化后,将调用此方法。 这个默认执行引发onAfterFind事件。 你可以重写这个方法, 做处理后每个新查找的记录实例。 请确保您调用父实例,以便正确地引发该事件。

afterFindInternal() 方法
public void afterFindInternal()
源码: framework/db/ar/CActiveRecord.php#987 (显示) publicfunctionafterFindInternal()
{
$this->afterFind();
}

调用afterFind。 这个方法内部使用。

afterSave() 方法
protected void afterSave()
源码: framework/db/ar/CActiveRecord.php#902 (显示) protectedfunctionafterSave()
{
if($this->hasEventHandler('onAfterSave'))
$this->onAfterSave(newCEvent($this));
}

记录被成功保存后,调用此方法。 这个默认执行引发onAfterSave事件。 您可重写此方法,以记录保存后做后处理。 请确保您调用父实例,以便正确地引发该事件。

applyScopes() 方法
public void applyScopes(CDbCriteria &$criteria)
$criteriaCDbCriteria查询条件。通过合并dbCriteria可修改此参数。
源码: framework/db/ar/CActiveRecord.php#1302 (显示) publicfunctionapplyScopes(&$criteria)
{
if(!empty($criteria->scopes))
{
$scs=$this->scopes();
$c=$this->getDbCriteria();
foreach((array)$criteria->scopesas$k=>$v)
{
if(is_integer($k))
{
if(is_string($v))
{
if(isset($scs[$v]))
{
$c->mergeWith($scs[$v],true);
continue;
}
$scope=$v;
$params=array();
}
elseif(is_array($v))
{
$scope=key($v);
$params=current($v);
}
}
elseif(is_string($k))
{
$scope=$k;
$params=$v;
}

call_user_func_array(array($this,$scope),(array)$params);
}
}

if(isset($c)||($c=$this->getDbCriteria(false))!==null)
{
$c->mergeWith($criteria);
$criteria=$c;
$this->_c=null;
}
}

适用于给定条件的查询范围。 这种方法合并dbCriteria与给定的条件参数。 它将重置dbCriteria为null。

attributeNames() 方法
public array attributeNames()
{return}array属性名称列表
源码: framework/db/ar/CActiveRecord.php#563 (显示) publicfunctionattributeNames()
{
returnarray_keys($this->getMetaData()->columns);
}

返回模型的所有属性名称的列表。 这将返回AR类与此相关联的所有表的列名。

beforeDelete() 方法
protected boolean beforeDelete()
{return}boolean是否应删除记录。默认值为true。
源码: framework/db/ar/CActiveRecord.php#915 (显示) protectedfunctionbeforeDelete()
{
if($this->hasEventHandler('onBeforeDelete'))
{
$event=newCModelEvent($this);
$this->onBeforeDelete($event);
return$event->isValid;
}
else
returntrue;
}

在删除记录之前调用此方法。 这个默认执行引发onBeforeDelete事件。 您可以重写此方法,以做为记录删除任何准备工作。 请确保您调用父实例,以便正确地引发该事件。

beforeFind() 方法
protected void beforeFind()
源码: framework/db/ar/CActiveRecord.php#951 (显示) protectedfunctionbeforeFind()
{
if($this->hasEventHandler('onBeforeFind'))
{
$event=newCModelEvent($this);
//forbackwardcompatibility
$event->criteria=func_num_args()>0?func_get_arg(0):null;
$this->onBeforeFind($event);
}
}

AR finder执行查找调用之前,将引发此事件。 查找调用包括find,findAll,findByPk, findAllByPk,findByAttributes和findAllByAttributes。 这个默认执行引发onBeforeFind事件。 如果重写此方法, 请确保您调用父实例,以便正确地引发该事件。

从1.1.5版本开始, 这种方法可称为一个隐藏的参数CDbCriteria表示当前查询条件传递到一个AR方法。

beforeFindInternal() 方法
public void beforeFindInternal()
源码: framework/db/ar/CActiveRecord.php#978 (显示) publicfunctionbeforeFindInternal()
{
$this->beforeFind();
}

调用beforeFind。 这个方法内部使用。

beforeSave() 方法
protected boolean beforeSave()
{return}boolean是否应该执行可在,默认为true。
源码: framework/db/ar/CActiveRecord.php#884 (显示) protectedfunctionbeforeSave()
{
if($this->hasEventHandler('onBeforeSave'))
{
$event=newCModelEvent($this);
$this->onBeforeSave($event);
return$event->isValid;
}
else
returntrue;
}

保存记录之前,调用这个方法(验证后,如果有的话)。 默认实现引发onBeforeSave事件。 您可以重写此方法做任何记录保存的准备工作。 使用isNewRecord 以确认是否是插入或保存记录。 请确保您调用父实例,以便正确地引发该事件。

cache() 方法 (可用自 v1.1.7)
public CActiveRecord cache(integer $duration, CCacheDependency $dependency=NULL, integer $queryCount=1)
$durationinteger查询结果可能保持在缓存中有效的秒数。 如果这是0,缓存将被禁用。
$dependencyCCacheDependency保存查询结果到缓存时使用的依赖关系。
$queryCountinteger在调用此方法后,需要缓存的SQL查询的数目。 默认值为 1,这意味着下一个SQL查询将被缓存。
{return}CActiveRecordAR实例本身。
源码: framework/db/ar/CActiveRecord.php#109 (显示) publicfunctioncache($duration,$dependency=null,$queryCount=1)
{
$this->getDbConnection()->cache($duration,$dependency,$queryCount);
return$this;
}

设置关于查询缓存的参数. 这是CDbConnection::cache()的一种快捷方法。 它改变查询缓存的dbConnection实例参数。

count() 方法
public string count(mixed $condition='', array $params=array ( ))
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数
{return}string满足指定的查询条件的行数。注:类型是字符串保持最大精度。
源码: framework/db/ar/CActiveRecord.php#1528 (显示) publicfunctioncount($condition='',$params=array())
{
Yii::trace(get_class($this).'.count()','system.db.ar.CActiveRecord');
$builder=$this->getCommandBuilder();
$criteria=$builder->createCriteria($condition,$params);
$this->applyScopes($criteria);

if(empty($criteria->with))
return$builder->createCountCommand($this->getTableSchema(),$criteria)->queryScalar();
else
{
$finder=newCActiveFinder($this,$criteria->with);
return$finder->count($criteria);
}
}

查找满足指定查询条件的行数。 参见find()详细说明关于$condition和$params。

countByAttributes() 方法 (可用自 v1.1.4)
public string countByAttributes(array $attributes, mixed $condition='', array $params=array ( ))
$attributesarray列表中的属性值(属性名索引)活动记录相匹配。 属性值可以是一个数组,用于生成的条件。
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数
{return}string满足指定的查询条件的行数。注:类型是字符串保持最大精度。
源码: framework/db/ar/CActiveRecord.php#1554 (显示) publicfunctioncountByAttributes($attributes,$condition='',$params=array())
{
Yii::trace(get_class($this).'.countByAttributes()','system.db.ar.CActiveRecord');
$prefix=$this->getTableAlias(true).'.';
$builder=$this->getCommandBuilder();
$criteria=$builder->createColumnCriteria($this->getTableSchema(),$attributes,$condition,$params,$prefix);
$this->applyScopes($criteria);

if(empty($criteria->with))
return$builder->createCountCommand($this->getTableSchema(),$criteria)->queryScalar();
else
{
$finder=newCActiveFinder($this,$criteria->with);
return$finder->count($criteria);
}
}

查找具有指定的属性值的行数。 参见find()详细说明关于$condition和$params。

countBySql() 方法
public string countBySql(string $sql, array $params=array ( ))
$sqlstringSQL语句
$paramsarray要绑定到的 SQL 语句的参数
{return}string满足指定的查询条件的行数。注:类型是字符串保持最大精度。
源码: framework/db/ar/CActiveRecord.php#1579 (显示) publicfunctioncountBySql($sql,$params=array())
{
Yii::trace(get_class($this).'.countBySql()','system.db.ar.CActiveRecord');
return$this->getCommandBuilder()->createSqlCommand($sql,$params)->queryScalar();
}

查找指定SQL语句影响的行数。 这相当于调用CDbCommand::queryScalar, 以指定的SQL声明和参数。

defaultScope() 方法
public array defaultScope()
{return}array查询条件。 这将作为CDbCriteria参数的构造方法。
源码: framework/db/ar/CActiveRecord.php#339 (显示) publicfunctiondefaultScope()
{
returnarray();
}

返回默认的命名范围,应隐含这种模式适用于所有查询。 注意,默认的范围只适用于SELECT查询。忽视对INSERT,UPDATE和DELETE查询。 默认实现只返回一个空数组。 如果模型需要一些默认的标准(如只有活动记录,当返回)查询,你可以重写此方法。

delete() 方法
public boolean delete()
{return}boolean是否删除成功。
源码: framework/db/ar/CActiveRecord.php#1152 (显示) publicfunctiondelete()
{
if(!$this->getIsNewRecord())
{
Yii::trace(get_class($this).'.delete()','system.db.ar.CActiveRecord');
if($this->beforeDelete())
{
$result=$this->deleteByPk($this->getPrimaryKey())>0;
$this->afterDelete();
return$result;
}
else
returnfalse;
}
else
thrownewCDbException(Yii::t('yii','Theactiverecordcannotbedeletedbecauseitisnew.'));
}

删除对应于此活动记录的行。

deleteAll() 方法
public integer deleteAll(mixed $condition='', array $params=array ( ))
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数
{return}integer删除的行数
源码: framework/db/ar/CActiveRecord.php#1745 (显示) publicfunctiondeleteAll($condition='',$params=array())
{
Yii::trace(get_class($this).'.deleteAll()','system.db.ar.CActiveRecord');
$builder=$this->getCommandBuilder();
$criteria=$builder->createCriteria($condition,$params);
$command=$builder->createDeleteCommand($this->getTableSchema(),$criteria);
return$command->execute();
}

删除指定条件的行。 参见find()详细说明关于$condition和$params。

deleteAllByAttributes() 方法
public integer deleteAllByAttributes(array $attributes, mixed $condition='', array $params=array ( ))
$attributesarray列表中的属性值(属性名索引)活动记录相匹配。 属性值可以是一个数组,用于生成的条件。
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数
{return}integer执行影响的行数。
源码: framework/db/ar/CActiveRecord.php#1763 (显示) publicfunctiondeleteAllByAttributes($attributes,$condition='',$params=array())
{
Yii::trace(get_class($this).'.deleteAllByAttributes()','system.db.ar.CActiveRecord');
$builder=$this->getCommandBuilder();
$table=$this->getTableSchema();
$criteria=$builder->createColumnCriteria($table,$attributes,$condition,$params);
$command=$builder->createDeleteCommand($table,$criteria);
return$command->execute();
}

删除指定的属性值相匹配的行。 参见find()详细说明关于$condition和$params。

deleteByPk() 方法
public integer deleteByPk(mixed $pk, mixed $condition='', array $params=array ( ))
$pkmixed主键值。对多个主键使用数组。复合键,对于每个键的值必须是一个数组(列名=>列值)。
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数
{return}integer删除的行数
源码: framework/db/ar/CActiveRecord.php#1729 (显示) publicfunctiondeleteByPk($pk,$condition='',$params=array())
{
Yii::trace(get_class($this).'.deleteByPk()','system.db.ar.CActiveRecord');
$builder=$this->getCommandBuilder();
$criteria=$builder->createPkCriteria($this->getTableSchema(),$pk,$condition,$params);
$command=$builder->createDeleteCommand($this->getTableSchema(),$criteria);
return$command->execute();
}

删除指定主键的行。 参见find()详细说明关于$condition和$params。

equals() 方法
public boolean equals(CActiveRecord $record)
$recordCActiveRecord要比较的记录
{return}boolean两个活动的记录是否是指数据库表中的同一行。
源码: framework/db/ar/CActiveRecord.php#1200 (显示) publicfunctionequals($record)
{
return$this->tableName()===$record->tableName()&&$this->getPrimaryKey()===$record->getPrimaryKey();
}

当前活动记录与另一个比较。 通过比较表名和两个活动记录的主键值来作比较。

exists() 方法
public boolean exists(mixed $condition='', array $params=array ( ))
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数
{return}boolean是否满足指定条件的行。
源码: framework/db/ar/CActiveRecord.php#1592 (显示) publicfunctionexists($condition='',$params=array())
{
Yii::trace(get_class($this).'.exists()','system.db.ar.CActiveRecord');
$builder=$this->getCommandBuilder();
$criteria=$builder->createCriteria($condition,$params);
$table=$this->getTableSchema();
$criteria->select='1';
$criteria->limit=1;
$this->applyScopes($criteria);

if(empty($criteria->with))
return$builder->createFindCommand($table,$criteria)->queryRow()!==false;
else
{
$criteria->select='*';
$finder=newCActiveFinder($this,$criteria->with);
return$finder->count($criteria)>0;
}
}

检查是否满足指定条件的行。 参见find()详细说明关于$condition和$params。

find() 方法
public CActiveRecord find(mixed $condition='', array $params=array ( ))
$conditionmixed查询条件或标准。 如果一个字符串,它被作为查询条件 (WHERE 子句) ; 如果一个数组,它被视为构建CDbCriteria对象初始值; 否则,它应该是CDbCriteria对象的一个实例。
$paramsarray要绑定到的 SQL 语句的参数。 这仅仅是第一个参数是一个字符串(查询条件)时使用。 在其他情况下,请使用CDbCriteria::params设置参数。
{return}CActiveRecord找到的记录。如果没找到任何记录,则为 null。
源码: framework/db/ar/CActiveRecord.php#1388 (显示) publicfunctionfind($condition='',$params=array())
{
Yii::trace(get_class($this).'.find()','system.db.ar.CActiveRecord');
$criteria=$this->getCommandBuilder()->createCriteria($condition,$params);
return$this->query($criteria);
}

查找指定条件的单个活动记录。

findAll() 方法
public array findAll(mixed $condition='', array $params=array ( ))
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数。
{return}array满足指定条件的活动记录列表,如果没有找到将返回一个空的数组。
源码: framework/db/ar/CActiveRecord.php#1402 (显示) publicfunctionfindAll($condition='',$params=array())
{
Yii::trace(get_class($this).'.findAll()','system.db.ar.CActiveRecord');
$criteria=$this->getCommandBuilder()->createCriteria($condition,$params);
return$this->query($criteria,true);
}

查找满足指定条件的所有活动记录。 参见find()详细说明关于$condition和$params。

findAllByAttributes() 方法
public array findAllByAttributes(array $attributes, mixed $condition='', array $params=array ( ))
$attributesarray列表中的属性值(属性名索引)活动记录相匹配。 属性值可以是一个数组将被用来生成一个条件。
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数。
{return}array找到的记录。如果没有找到返回一个空数组。
源码: framework/db/ar/CActiveRecord.php#1467 (显示) publicfunctionfindAllByAttributes($attributes,$condition='',$params=array())
{
Yii::trace(get_class($this).'.findAllByAttributes()','system.db.ar.CActiveRecord');
$prefix=$this->getTableAlias(true).'.';
$criteria=$this->getCommandBuilder()->createColumnCriteria($this->getTableSchema(),$attributes,$condition,$params,$prefix);
return$this->query($criteria,true);
}

查找具有指定属性值的所有活动记录。 参见find()详细说明关于$condition和$params。

findAllByPk() 方法
public array findAllByPk(mixed $pk, mixed $condition='', array $params=array ( ))
$pkmixed主键值。对多个主键使用数组。复合键,对于每个键的值必须是一个数组(列名=>列值)。
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数。
{return}array找到的记录。如果没有找到返回一个空数组。
源码: framework/db/ar/CActiveRecord.php#1433 (显示) publicfunctionfindAllByPk($pk,$condition='',$params=array())
{
Yii::trace(get_class($this).'.findAllByPk()','system.db.ar.CActiveRecord');
$prefix=$this->getTableAlias(true).'.';
$criteria=$this->getCommandBuilder()->createPkCriteria($this->getTableSchema(),$pk,$condition,$params,$prefix);
return$this->query($criteria,true);
}

查找指定主键的所有活动记录。 参见find()详细说明关于$condition和$params。

findAllBySql() 方法
public array findAllBySql(string $sql, array $params=array ( ))
$sqlstringSQL语句
$paramsarray要绑定到的 SQL 语句的参数
{return}array找到的记录。如果没找到任何记录,则为 null。
源码: framework/db/ar/CActiveRecord.php#1504 (显示) publicfunctionfindAllBySql($sql,$params=array())
{
Yii::trace(get_class($this).'.findAllBySql()','system.db.ar.CActiveRecord');
$this->beforeFind();
if(($criteria=$this->getDbCriteria(false))!==null&&!empty($criteria->with))
{
$this->_c=null;
$finder=newCActiveFinder($this,$criteria->with);
return$finder->findAllBySql($sql,$params);
}
else
{
$command=$this->getCommandBuilder()->createSqlCommand($sql,$params);
return$this->populateRecords($command->queryAll());
}
}

查找指定SQL语句的所有活动记录。

findByAttributes() 方法
public CActiveRecord findByAttributes(array $attributes, mixed $condition='', array $params=array ( ))
$attributesarray列表中的属性值(属性名索引)活动记录相匹配。 属性值可以是一个数组将被用来生成一个条件。
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数。
{return}CActiveRecord找到的记录。如果没找到任何记录,则为 null。
源码: framework/db/ar/CActiveRecord.php#1450 (显示) publicfunctionfindByAttributes($attributes,$condition='',$params=array())
{
Yii::trace(get_class($this).'.findByAttributes()','system.db.ar.CActiveRecord');
$prefix=$this->getTableAlias(true).'.';
$criteria=$this->getCommandBuilder()->createColumnCriteria($this->getTableSchema(),$attributes,$condition,$params,$prefix);
return$this->query($criteria);
}

查找具有指定属性值的单个活动记录。 参见find()详细说明关于$condition和$params。

findByPk() 方法
public CActiveRecord findByPk(mixed $pk, mixed $condition='', array $params=array ( ))
$pkmixed主键值。对多个主键使用数组。复合键,对于每个键的值必须是一个数组(列名=>列值)。
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数。
{return}CActiveRecord找到的记录。如果没找到任何记录,则为 null。
源码: framework/db/ar/CActiveRecord.php#1417 (显示) publicfunctionfindByPk($pk,$condition='',$params=array())
{
Yii::trace(get_class($this).'.findByPk()','system.db.ar.CActiveRecord');
$prefix=$this->getTableAlias(true).'.';
$criteria=$this->getCommandBuilder()->createPkCriteria($this->getTableSchema(),$pk,$condition,$params,$prefix);
return$this->query($criteria);
}

查找指定主键的单一活动记录。 参见find()详细说明关于$condition和$params。

findBySql() 方法
public CActiveRecord findBySql(string $sql, array $params=array ( ))
$sqlstringSQL语句
$paramsarray要绑定到的 SQL 语句的参数
{return}CActiveRecord找到的记录。如果没找到任何记录,则为 null。
源码: framework/db/ar/CActiveRecord.php#1481 (显示) publicfunctionfindBySql($sql,$params=array())
{
Yii::trace(get_class($this).'.findBySql()','system.db.ar.CActiveRecord');
$this->beforeFind();
if(($criteria=$this->getDbCriteria(false))!==null&&!empty($criteria->with))
{
$this->_c=null;
$finder=newCActiveFinder($this,$criteria->with);
return$finder->findBySql($sql,$params);
}
else
{
$command=$this->getCommandBuilder()->createSqlCommand($sql,$params);
return$this->populateRecord($command->queryRow());
}
}

查找指定SQL语句的单个活动记录。

getActiveRelation() 方法
public CActiveRelation getActiveRelation(string $name)
$namestring关系名称
{return}CActiveRelation为此AR类声明命名的关系。如果关系不存在则为null。
源码: framework/db/ar/CActiveRecord.php#628 (显示) publicfunctiongetActiveRelation($name)
{
returnisset($this->getMetaData()->relations[$name])?$this->getMetaData()->relations[$name]:null;
}

返回此AR类声明的命名关系。

getAttribute() 方法
public mixed getAttribute(string $name)
$namestring属性名称
{return}mixed属性值。如果属性未设置​​或不存在则为null。
源码: framework/db/ar/CActiveRecord.php#672 (显示) publicfunctiongetAttribute($name)
{
if(property_exists($this,$name))
return$this->$name;
elseif(isset($this->_attributes[$name]))
return$this->_attributes[$name];
}

返回命名的属性值。 如果这是一个新的记录,该属性未设置之前, 将返回的列的默认值。 如果该记录是查询的结果并不加载该属性时, 将返回null。 你也可以使用$this->AttributeName来获得属性值。

参见

  • hasAttribute
getAttributeLabel() 方法 (可用自 v1.1.4)
public string getAttributeLabel(string $attribute)
$attributestring属性名称
{return}string属性标签
源码: framework/db/ar/CActiveRecord.php#579 (显示) publicfunctiongetAttributeLabel($attribute)
{
$labels=$this->attributeLabels();
if(isset($labels[$attribute]))
return$labels[$attribute];
elseif(strpos($attribute,'.')!==false)
{
$segs=explode('.',$attribute);
$name=array_pop($segs);
$model=$this;
foreach($segsas$seg)
{
$relations=$model->getMetaData()->relations;
if(isset($relations[$seg]))
$model=CActiveRecord::model($relations[$seg]->className);
else
break;
}
return$model->getAttributeLabel($name);
}
else
return$this->generateAttributeLabel($attribute);
}

返回指定属性的文本标签。 这个方法重写父类, 支持返回关系对象中定义的标签。 特别注意,如果属性名称是"post.author.name"的形式, 那么此方法会从"author"关系"name"中获得属性标签。

参见

  • generateAttributeLabel
getAttributes() 方法
public array getAttributes(mixed $names=true)
$namesmixed属性的名称,其值必须返回。 如果这是true(默认),将返回所有属性, 包括那些没有从数据库加载的(这些属性将返回空)。 如果为null,则将返回所有属性,数据库未被加载的除外。
{return}arrayattribute values indexed by attribute names.
源码: framework/db/ar/CActiveRecord.php#735 (显示) publicfunctiongetAttributes($names=true)
{
$attributes=$this->_attributes;
foreach($this->getMetaData()->columnsas$name=>$column)
{
if(property_exists($this,$name))
$attributes[$name]=$this->$name;
elseif($names===true&&!isset($attributes[$name]))
$attributes[$name]=null;
}
if(is_array($names))
{
$attrs=array();
foreach($namesas$name)
{
if(property_exists($this,$name))
$attrs[$name]=$this->$name;
else
$attrs[$name]=isset($attributes[$name])?$attributes[$name]:null;
}
return$attrs;
}
else
return$attributes;
}

返回所有列的属性值。 注意,不返回相关的对象。

getCommandBuilder() 方法
public CDbCommandBuilder getCommandBuilder()
{return}CDbCommandBuilder这个命令生成器属于AR类
源码: framework/db/ar/CActiveRecord.php#646 (显示) publicfunctiongetCommandBuilder()
{
return$this->getDbConnection()->getSchema()->getCommandBuilder();
}

返回此AR的命令生成器。

getDbConnection() 方法
public CDbConnection getDbConnection()
{return}CDbConnection活动记录使用的数据库连接。
源码: framework/db/ar/CActiveRecord.php#609 (显示) publicfunctiongetDbConnection()
{
if(self::$db!==null)
returnself::$db;
else
{
self::$db=Yii::app()->getDb();
if(self::$dbinstanceofCDbConnection)
returnself::$db;
else
thrownewCDbException(Yii::t('yii','ActiveRecordrequiresa"db"CDbConnectionapplicationcomponent.'));
}
}

返回活动记录所使用的数据库连接。 默认情况下,"db"应用程序组件用作数据库连接。 如果您要使用一个不同的数据库连接,您可以重写此方法。

getDbCriteria() 方法
public CDbCriteria getDbCriteria(boolean $createIfNull=true)
$createIfNullboolean是否创建一个条件实例如果它不存在。默认值为true。
{return}CDbCriteria和这个模型相关的查询条件。 这个条件主要被 named scope使用, 特征是积累不同的条件规范。
源码: framework/db/ar/CActiveRecord.php#311 (显示) publicfunctiongetDbCriteria($createIfNull=true)
{
if($this->_c===null)
{
if(($c=$this->defaultScope())!==array()||$createIfNull)
$this->_c=newCDbCriteria($c);
}
return$this->_c;
}

返回和这个模型相关的查询条件。

getIsNewRecord() 方法
public boolean getIsNewRecord()
{return}boolean该记录是否是新的,就插入时调用save。 在构造函数和populateRecord自动设置此属性。 默认值为false, 如果使用new运算符创建实例,它会被设置为true。
源码: framework/db/ar/CActiveRecord.php#799 (显示) publicfunctiongetIsNewRecord()
{
return$this->_new;
}

返回当前记录是否是新的。

getMetaData() 方法
public CActiveRecordMetaData getMetaData()
{return}CActiveRecordMetaData这个AR类的元数据。
源码: framework/db/ar/CActiveRecord.php#389 (显示) publicfunctiongetMetaData()
{
if($this->_md!==null)
return$this->_md;
else
return$this->_md=self::model(get_class($this))->_md;
}

返回这个AR的元数据。

getOldPrimaryKey() 方法 (可用自 v1.1.0)
public mixed getOldPrimaryKey()
{return}mixed旧的主键值。则返回数组(列名=>列值)如果主键是复合型。 If primary key is not defined, null will be returned.
源码: framework/db/ar/CActiveRecord.php#1255 (显示) publicfunctiongetOldPrimaryKey()
{
return$this->_pk;
}

返回旧的主键值。 这指的是主键值已填充到记录后, 执行查找方法 (例如: find(),findAll()), 即使主关键属性都会被手动分配一个不同的值,值保持不变。

getPrimaryKey() 方法
public mixed getPrimaryKey()
{return}mixed主键值。则返回数组(列名=>列值)如果主键是复合型。 如果没有定义主键,将返回null。
源码: framework/db/ar/CActiveRecord.php#1210 (显示) publicfunctiongetPrimaryKey()
{
$table=$this->getMetaData()->tableSchema;
if(is_string($table->primaryKey))
return$this->{$table->primaryKey};
elseif(is_array($table->primaryKey))
{
$values=array();
foreach($table->primaryKeyas$name)
$values[$name]=$this->$name;
return$values;
}
else
returnnull;
}

返回主键值。

getRelated() 方法
public mixed getRelated(string $name, boolean $refresh=false, array $params=array ( ))
$namestring关系名 (参见relations)
$refreshboolean是否从数据库重新载入相关对象,默认值为false。
$paramsarray附加参数,在关系声明中指定自定义查询条件。
{return}mixed相关对象.
源码: framework/db/ar/CActiveRecord.php#242 (显示) publicfunctiongetRelated($name,$refresh=false,$params=array())
{
if(!$refresh&&$params===array()&&(isset($this->_related[$name])||array_key_exists($name,$this->_related)))
return$this->_related[$name];

$md=$this->getMetaData();
if(!isset($md->relations[$name]))
thrownewCDbException(Yii::t('yii','{class}doesnothaverelation"{name}".',
array('{class}'=>get_class($this),'{name}'=>$name)));

Yii::trace('lazyloading'.get_class($this).'.'.$name,'system.db.ar.CActiveRecord');
$relation=$md->relations[$name];
if($this->getIsNewRecord()&&!$refresh&&($relationinstanceofCHasOneRelation||$relationinstanceofCHasManyRelation))
return$relationinstanceofCHasOneRelation?null:array();

if($params!==array())//dynamicquery
{
$exists=isset($this->_related[$name])||array_key_exists($name,$this->_related);
if($exists)
$save=$this->_related[$name];
$r=array($name=>$params);
}
else
$r=$name;
unset($this->_related[$name]);

$finder=newCActiveFinder($this,$r);
$finder->lazyFind($this);

if(!isset($this->_related[$name]))
{
if($relationinstanceofCHasManyRelation)
$this->_related[$name]=array();
elseif($relationinstanceofCStatRelation)
$this->_related[$name]=$relation->defaultValue;
else
$this->_related[$name]=null;
}

if($params!==array())
{
$results=$this->_related[$name];
if($exists)
$this->_related[$name]=$save;
else
unset($this->_related[$name]);
return$results;
}
else
return$this->_related[$name];
}

返回相关的记录。 这个方法将返回当前记录的相关记录。 如果关系是 HAS_ONE 或 BELONGS_TO, 如果对象不存在,将返回一个单个对象或null。 如果关系是HAS_MANY 或 MANY_MANY, 它返回一个对象数组或一个空数组。

getTableAlias() 方法 (可用自 v1.1.1)
public string getTableAlias(boolean $quote=false, boolean $checkScopes=true)
$quoteboolean是否要引用别名
$checkScopesboolean检测别名当前是否在应用范围被定义。 调用defaultScope此方法时,这个参数必须被设置为false。 否则将形成一个无限循环。
{return}string默认表别名
源码: framework/db/ar/CActiveRecord.php#1358 (显示) publicfunctiongetTableAlias($quote=false,$checkScopes=true)
{
if($checkScopes&&($criteria=$this->getDbCriteria(false))!==null&&$criteria->alias!='')
$alias=$criteria->alias;
else
$alias=$this->_alias;
return$quote?$this->getDbConnection()->getSchema()->quoteTableName($alias):$alias;
}

返回由 find 方法使用表的别名。 在关系查询,根据对应关系的声明, 返回的表的别名可能会有所不同。 此外,由setTableAlias可以由应用的范围覆盖。

getTableSchema() 方法
public CDbTableSchema getTableSchema()
{return}CDbTableSchema这个表的元数据属于AR类
源码: framework/db/ar/CActiveRecord.php#637 (显示) publicfunctiongetTableSchema()
{
return$this->getMetaData()->tableSchema;
}

返回表的元数据,这属于AR类。

hasAttribute() 方法
public boolean hasAttribute(string $name)
$namestring属性名称
{return}boolean这是否是AR命名的属性(table column).
源码: framework/db/ar/CActiveRecord.php#656 (显示) publicfunctionhasAttribute($name)
{
returnisset($this->getMetaData()->columns[$name]);
}

检查此AR是否有命名的属性。

hasRelated() 方法
public boolean hasRelated(string $name)
$namestring关系名
{return}boolean返回一个值指示是否命名相关对象被载入。
源码: framework/db/ar/CActiveRecord.php#299 (显示) publicfunctionhasRelated($name)
{
returnisset($this->_related[$name])||array_key_exists($name,$this->_related);
}

返回一个值,该值指示是否已加载命名的相关对象。

init() 方法
public void init()
源码: framework/db/ar/CActiveRecord.php#93 (显示) publicfunctioninit()
{
}

初始化这个模型。 当一个AR实例是新创建的或有它的scenario设置, 这个方法被触发。 您可以重写此方法以提供所需的初始化的代码模型 (例如:设置初始的属性值)。

insert() 方法
public boolean insert(array $attributes=NULL)
$attributesarray需要保存的属性列表。默认为null, 这意味着从数据库中加载的所有属性将被保存。
{return}boolean属性是否有效,并将记录插入成功。
源码: framework/db/ar/CActiveRecord.php#1004 (显示) publicfunctioninsert($attributes=null)
{
if(!$this->getIsNewRecord())
thrownewCDbException(Yii::t('yii','Theactiverecordcannotbeinsertedtodatabasebecauseitisnotnew.'));
if($this->beforeSave())
{
Yii::trace(get_class($this).'.insert()','system.db.ar.CActiveRecord');
$builder=$this->getCommandBuilder();
$table=$this->getMetaData()->tableSchema;
$command=$builder->createInsertCommand($table,$this->getAttributes($attributes));
if($command->execute())
{
$primaryKey=$table->primaryKey;
if($table->sequenceName!==null)
{
if(is_string($primaryKey)&&$this->$primaryKey===null)
$this->$primaryKey=$builder->getLastInsertID($table);
elseif(is_array($primaryKey))
{
foreach($primaryKeyas$pk)
{
if($this->$pk===null)
{
$this->$pk=$builder->getLastInsertID($table);
break;
}
}
}
}
$this->_pk=$this->getPrimaryKey();
$this->afterSave();
$this->setIsNewRecord(false);
$this->setScenario('update');
returntrue;
}
}
returnfalse;
}

插入一行到基于这个ActiveRecord的属性表。 如果表的主键是自动增量和插入前为null, 将插入后的实际值填充。 注意,验证不执行此方法。你可以调用validate执行验证。 记录成功插入到数据库后,它的isNewRecord属性将设置为false, 和它的scenario属性将设置为‘update’。

instantiate() 方法
protected CActiveRecord instantiate(array $attributes)
$attributesarray活动记录的属性值列表。
{return}CActiveRecord活动记录
源码: framework/db/ar/CActiveRecord.php#1841 (显示) protectedfunctioninstantiate($attributes)
{
$class=get_class($this);
$model=new$class(null);
return$model;
}

创建活动记录实例。 这个方法调用populateRecord和populateRecords。 如果正在创建的实例, 你可以重写此方法,取决于填充纪录的属性。 例如,通过创建基于列的值的记录, 你可以实现所谓的单表继承映射。

model() 方法
public static CActiveRecord model(string $className='CActiveRecord')
$classNamestring活动记录类的名称。
{return}CActiveRecord活动记录模型的一个实例。
源码: framework/db/ar/CActiveRecord.php#372 (显示) publicstaticfunctionmodel($className=__CLASS__)
{
if(isset(self::$_models[$className]))
returnself::$_models[$className];
else
{
$model=self::$_models[$className]=new$className(null);
$model->_md=newCActiveRecordMetaData($model);
$model->attachBehaviors($model->behaviors());
return$model;
}
}

返回指定AR类的静态模型。 返回的模型是一个静态的AR类的实例。 它提供了用于调用类级别的方法(某些似乎于静态类方法。)

每个派生类必须重写此方法如下,

public static function model($className=__CLASS__)
{  return parent::model($className);
}

offsetExists() 方法
public boolean offsetExists(mixed $offset)
$offsetmixed检查到的偏移量
{return}boolean
源码: framework/db/ar/CActiveRecord.php#1854 (显示) publicfunctionoffsetExists($offset)
{
return$this->__isset($offset);
}

返回是否有指定偏移量的元素。 这种方法需要接口ArrayAccess。

onAfterDelete() 方法
public void onAfterDelete(CEvent $event)
$eventCEvent事件参数
源码: framework/db/ar/CActiveRecord.php#847 (显示) publicfunctiononAfterDelete($event)
{
$this->raiseEvent('onAfterDelete',$event);
}

在删除记录之后,将引发此事件。

onAfterFind() 方法
public void onAfterFind(CEvent $event)
$eventCEvent事件参数
源码: framework/db/ar/CActiveRecord.php#870 (显示) publicfunctiononAfterFind($event)
{
$this->raiseEvent('onAfterFind',$event);
}

引发此事件记录后找到方法的实例。

onAfterSave() 方法
public void onAfterSave(CEvent $event)
$eventCEvent事件参数
源码: framework/db/ar/CActiveRecord.php#828 (显示) publicfunctiononAfterSave($event)
{
$this->raiseEvent('onAfterSave',$event);
}

保存记录之后,将引发此事件。

onBeforeDelete() 方法
public void onBeforeDelete(CModelEvent $event)
$eventCModelEvent事件参数
源码: framework/db/ar/CActiveRecord.php#838 (显示) publicfunctiononBeforeDelete($event)
{
$this->raiseEvent('onBeforeDelete',$event);
}

在删除记录之前,将引发此事件。 通过设置CModelEvent::isValid为false,正常delete()进程被停止。

onBeforeFind() 方法
public void onBeforeFind(CModelEvent $event)
$eventCModelEvent事件参数
源码: framework/db/ar/CActiveRecord.php#861 (显示) publicfunctiononBeforeFind($event)
{
$this->raiseEvent('onBeforeFind',$event);
}

AR finder执行查找调用之前,将引发此事件。 在这种情况下,这CModelEvent::criteria个属性作为参数传递给此方法作为查询条件。 如果你要访问范围中指定的查询条件, 请使用getDbCriteria()。 你可以修改任何条件,根据需求定制。

参见

  • beforeFind
onBeforeSave() 方法
public void onBeforeSave(CModelEvent $event)
$eventCModelEvent事件参数
源码: framework/db/ar/CActiveRecord.php#819 (显示) publicfunctiononBeforeSave($event)
{
$this->raiseEvent('onBeforeSave',$event);
}

保存记录之前,将引发此事件。 通过设置CModelEvent::isValid为false,正常save()进程被停止。

populateRecord() 方法
public CActiveRecord populateRecord(array $attributes, boolean $callAfterFind=true)
$attributesarray属性值(列名=>列值)
$callAfterFindboolean是否要记录后调用afterFind填充。
{return}CActiveRecord新创建的活动记录。类的对象是相同的模型类。 如果输入的数据是false,则返回null。
源码: framework/db/ar/CActiveRecord.php#1781 (显示) publicfunctionpopulateRecord($attributes,$callAfterFind=true)
{
if($attributes!==false)
{
$record=$this->instantiate($attributes);
$record->setScenario('update');
$record->init();
$md=$record->getMetaData();
foreach($attributesas$name=>$value)
{
if(property_exists($record,$name))
$record->$name=$value;
elseif(isset($md->columns[$name]))
$record->_attributes[$name]=$value;
}
$record->_pk=$record->getPrimaryKey();
$record->attachBehaviors($record->behaviors());
if($callAfterFind)
$record->afterFind();
return$record;
}
else
returnnull;
}

给指定的属性创建活动记录 此方法由 find 方法内部使用。

populateRecords() 方法
public array populateRecords(array $data, boolean $callAfterFind=true, string $index=NULL)
$dataarray活动记录的属性值列表。
$callAfterFindboolean是否要记录后调用afterFind填充。
$indexstring其值将用作查询结果数组索引属性的名称。 如果为null,这意味着将从零开始的整数索引的数组。
{return}array活动记录的列表
源码: framework/db/ar/CActiveRecord.php#1815 (显示) publicfunctionpopulateRecords($data,$callAfterFind=true,$index=null)
{
$records=array();
foreach($dataas$attributes)
{
if(($record=$this->populateRecord($attributes,$callAfterFind))!==null)
{
if($index===null)
$records[]=$record;
else
$records[$record->$index]=$record;
}
}
return$records;
}

创建基于输入数据的活动记录的列表。 此方法由 find 方法内部使用。

primaryKey() 方法
public mixed primaryKey()
{return}mixed相关数据表的主键。 如果该键是一个单一的列,它应当返回列的名称; 如果键是由多个列组成的复合键, 它应该返回数组的键列名称。
源码: framework/db/ar/CActiveRecord.php#434 (显示) publicfunctionprimaryKey()
{
}

返回相关数据库表的主键。 这种方法是指表没有定义主键时(一些legency数据库)的情况下重写。 如果表已定义主键, 你不需要重写此方法。默认实现只返回null, 意思是返回在数据库中定义的主键。

query() 方法 (可用自 v1.1.7)
protected mixed query(CDbCriteria $criteria, boolean $all=false)
$criteriaCDbCriteriathe query criteria
$allbooleanwhether to return all data
{return}mixedthe AR objects populated with the query result
源码: framework/db/ar/CActiveRecord.php#1278 (显示) protectedfunctionquery($criteria,$all=false)
{
$this->beforeFind();
$this->applyScopes($criteria);
if(empty($criteria->with))
{
if(!$all)
$criteria->limit=1;
$command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria);
return$all?$this->populateRecords($command->queryAll(),true,$criteria->index):$this->populateRecord($command->queryRow());
}
else
{
$finder=newCActiveFinder($this,$criteria->with);
return$finder->query($criteria,$all);
}
}

执行实际的数据库查询和填充AR对象的查询结果。 此方法由其他 AR 查询方法调用,主要是内部使用。

refresh() 方法
public boolean refresh()
{return}boolean该行是否仍然存在于数据库中。如果情况属实,最新的数据将被填充到这个活动记录。
源码: framework/db/ar/CActiveRecord.php#1174 (显示) publicfunctionrefresh()
{
Yii::trace(get_class($this).'.refresh()','system.db.ar.CActiveRecord');
if(!$this->getIsNewRecord()&&($record=$this->findByPk($this->getPrimaryKey()))!==null)
{
$this->_attributes=array();
$this->_related=array();
foreach($this->getMetaData()->columnsas$name=>$column)
{
if(property_exists($this,$name))
$this->$name=$record->$name;
else
$this->_attributes[$name]=$record->$name;
}
returntrue;
}
else
returnfalse;
}

最新的数据将被填充到这个活动记录。

refreshMetaData() 方法
public void refreshMetaData()
源码: framework/db/ar/CActiveRecord.php#404 (显示) publicfunctionrefreshMetaData()
{
$finder=self::model(get_class($this));
$finder->_md=newCActiveRecordMetaData($finder);
if($this!==$finder)
$this->_md=$finder->_md;
}

刷新这个AR类的元数据。 通过调用这个方法,这个AR类将重新生成需要的元数据。 如果表的结构已经改变,且你想要使用最新的,这是非常有用的。 在你调用这个方法前,确保你已经调用CDbSchema::refresh, 要不然,旧表的的数据结构仍被使用。

relations() 方法
public array relations()
{return}array相关对象申明列表。 默认值为空数组。
源码: framework/db/ar/CActiveRecord.php#517 (显示) publicfunctionrelations()
{
returnarray();
}

申明关系的对象,应重写此方法。

可能存在两个活动记录对象之间的关系有四种类型:

  • BELONGS_TO: 例如,成员属于一个团队;
  • HAS_ONE: 例如,成员有个人资料;
  • HAS_MANY: 例如,一个团队有很多成员;
  • MANY_MANY: 例如,成员有很多的技巧和技能是属于这个成员的;


除了上述的关系类型, 还支持一种特殊的关系称为STAT,可以用来进行统计查询(或聚合查询)。 它检索聚合对相关对象的信息, 如每个帖子,对于每个产品,平均分数为注释的数目等。

相关对象的每个类定义在此方法中作为具有以下元素的数组:
'varName'=>array('relationType', 'className', 'foreign_key', ...additional options)
其中‘varName’是批变量/属性的名称,可以通过对象来访问; ‘relationType’是指关系的类型,它可以是以下四种常量之一, self::BELONGS_TO,self::HAS_ONE,self::HAS_MANY 和 self::MANY_MANY; ‘className’是指活动记录类的相关对象的名称; 和‘foreign_key’规定的外键涉及两种活动记录。 请注意复合外键, 他们可以一起列出,以逗号分隔,或者作为一个数组指定数组的格式(‘key1,key2’)。 如果你需要指定自定义的pk->fk关联,你可以定义数组(‘fk’=> ‘pk')。 对于组合键这将是数组(‘fk_c1’=>‘pk_с1’,‘fk_c2’=>‘pk_c2’)。 MANY_MANY关系中使用外键, 加入表必须声明为(例如:‘join_table(fk1,fk2)’)。

其余数组元素的名称-值,可以指定其他选项:
  • 'select': string|array, 被选中的列列表。默认值为 '*',这意味着是所有列。如果它们出现在一个表达式中(例如: COUNT(relationName.name) AS name_count)。
  • 'condition': string, WHERE子句。 默认值为空。注意,列引用需要加入'relationName'前缀 。(例如:relationName.age>20)
  • 'order': string, ORDER BY子句。 默认值为空。注意,列引用需要加入'relationName'前缀 。(例如:relationName.age DESC)
  • 'with': string|array, 应该与这个对象一起装载的子对象相关名单。 注意,这仅仅是延迟加载,而不是预先加载。
  • 'joinType': 联接类型。 默认值为‘LEFT OUTER JOIN’。
  • 'alias': 关系与关联表的别名。它默认为null,意味着表的别名与关系名称相同。
  • 'params': 参数绑定到要生成的SQL语句上。这应作为名称-值的数组。
  • 'on': ON 子句。此处指定的条件将追加到使用 AND 运算符的联接条件。
  • 'index': 其值应作为存储相关的对象的数组的键的列的名称。此选项仅适用于,HAS_MANY 和 MANY_MANY 关系。
  • 'scopes': 应用范围。在单一的范围情况下可以像'scopes'=>'scopeName',在多个作用域范围情况下可以使用数组像这样'scopes'=>array('scopeName1','scopeName2')。此选项自版本 1.1.9 可用。


延迟加载时有一定的关系,下列选项可用:
  • 'group': string, GROUP BY子句。 默认值为空。注意,列引用需要加入'relationName'前缀 。(例如: relationName.age)。此选项仅适用于HAS_MANY 和 MANY_MANY 关系。
  • 'having': string, HAVING子句。 默认值为空。注意,列引用需要加入'relationName'前缀 。(例如: relationName.age)。此选项仅适用于HAS_MANY 和 MANY_MANY 关系。
  • 'limit': 数据行的limit选择。 这个选项不能应用到BELONGS_TO。
  • 'offset': 数据行的偏移量。 这个选项不能应用到BELONGS_TO。
  • 'through': 获取相关的数据时将用作桥的模型的关系的名称。可以设置仅为 HAS_ONE 和 HAS_MANY。此选项自版本 1.1.7 可用。


以下是一个例子,为 'Post' 活动记录类相关对象的一个示例:
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'),
);

resetScope() 方法 (可用自 v1.1.2)
public CActiveRecord resetScope()
{return}CActiveRecord
源码: framework/db/ar/CActiveRecord.php#350 (显示) publicfunctionresetScope()
{
$this->_c=newCDbCriteria();
return$this;
}

重置所有变量作用域,包括默认的范围。

save() 方法
public boolean save(boolean $runValidation=true, array $attributes=NULL)
$runValidationboolean保存记录之前是否执行验证。 如果验证失败,记录不会被保存到数据库。
$attributesarray需要保存的属性列表。 默认为null,这意味着从数据库中加载的所有属性将被保存。
{return}booleanwhether the saving succeeds
源码: framework/db/ar/CActiveRecord.php#784 (显示) publicfunctionsave($runValidation=true,$attributes=null)
{
if(!$runValidation||$this->validate($attributes))
return$this->getIsNewRecord()?$this->insert($attributes):$this->update($attributes);
else
returnfalse;
}

保存当前的记录。

插入记录到数据表的一行, 如果它的isNewRecord属性为true(通常情况下使用的‘new’运算符来创建记录)。 否则, 将被用于更新表中的相应行(通常情况下,使用‘find’方法来查找记录)。

保存记录之前将执行验证。 如果验证失败,该记录将不会保存。 你可以调用getErrors()检索验证错误。

如果该记录通过插入保存, 它isNewRecord的属性会被设置为false,和它的scenario属性被设置为‘update’。 如果其主键是自动增量,并且在插入之前未设置, 将使用自动生成的值来填充主键。

saveAttributes() 方法
public boolean saveAttributes(array $attributes)
$attributesarray要更新的属性。 每个元素表示的属性名称或按其名称索引的属性值。 如果是后者,记录的属性将据此之前保存的更改。
{return}boolean更新是否成功
源码: framework/db/ar/CActiveRecord.php#1088 (显示) publicfunctionsaveAttributes($attributes)
{
if(!$this->getIsNewRecord())
{
Yii::trace(get_class($this).'.saveAttributes()','system.db.ar.CActiveRecord');
$values=array();
foreach($attributesas$name=>$value)
{
if(is_integer($name))
$values[$value]=$this->$value;
else
$values[$name]=$this->$name=$value;
}
if($this->_pk===null)
$this->_pk=$this->getPrimaryKey();
if($this->updateByPk($this->getOldPrimaryKey(),$values)>0)
{
$this->_pk=$this->getPrimaryKey();
returntrue;
}
else
returnfalse;
}
else
thrownewCDbException(Yii::t('yii','Theactiverecordcannotbeupdatedbecauseitisnew.'));
}

保存所选的属性列表。 不同于save,这个方法只保存现有的列数据集的指定的属性, 并且不调用beforeSave或afterSave。 请注意这个方法不过滤属性也不做验证。 所以不要这种方法接受不受信任的数据(如用户发布的数据)。 如果你想这样做,可以考虑以下方法代替:

$postRecord=Post::model()->findByPk($postID);
$postRecord->attributes=$_POST['post'];
$postRecord->save();

saveCounters() 方法 (可用自 v1.1.8)
public boolean saveCounters(array $counters)
$countersarray要更新计数器(列名=>增量值)
{return}boolean保存是否成功
源码: framework/db/ar/CActiveRecord.php#1130 (显示) publicfunctionsaveCounters($counters)
{
Yii::trace(get_class($this).'.saveCounters()','system.db.ar.CActiveRecord');
$builder=$this->getCommandBuilder();
$table=$this->getTableSchema();
$criteria=$builder->createPkCriteria($table,$this->getOldPrimaryKey());
$command=$builder->createUpdateCounterCommand($this->getTableSchema(),$counters,$criteria);
if($command->execute())
{
foreach($countersas$name=>$value)
$this->$name=$this->$name+$value;
returntrue;
}
else
returnfalse;
}

保存一个或多当前AR对象到计数器。 请注意,此方法不同于updateCounters , 它只保存当前AR对象。 用法示例如下所示:

$postRecord=Post::model()->findByPk($postID);
$postRecord->saveCounters(array('view_count'=>1));
如果你想减少计数器,请使用负值。

参见

  • updateCounters
scopes() 方法
public array scopes()
{return}array范围的界定。数组中的键范围名称; 数组中的值是相应的范围定义。 每个范围定义被表示为一个数组,其键必须是CDbCriteria的属性。
源码: framework/db/ar/CActiveRecord.php#553 (显示) publicfunctionscopes()
{
returnarray();
}

返回申明的命名范围。 代表一个查询条件的命名范围,可以串连在一起与其他的命名范围和查询。 这种方法应该重写, 子类声明为特定的AR类的命名范围。 例如, 下面的代码声明两个命名范围‘recently’和‘published’。

return array(  'published'=>array(        'condition'=>'status=1',  ),  'recently'=>array(        'order'=>'create_time DESC',        'limit'=>5,  ),
);
如果上述范围的申明在Post模型, 我们可以执行以下查询:
$posts=Post::model()->published()->findAll();
$posts=Post::model()->published()->recently()->findAll();
$posts=Post::model()->published()->with('comments')->findAll();
需要注意的是最后一个查询是一个关联查询。

setAttribute() 方法
public boolean setAttribute(string $name, mixed $value)
$namestring属性名称
$valuemixed属性值
{return}boolean属性是否存在和任务成功进行
源码: framework/db/ar/CActiveRecord.php#688 (显示) publicfunctionsetAttribute($name,$value)
{
if(property_exists($this,$name))
$this->$name=$value;
elseif(isset($this->getMetaData()->columns[$name]))
$this->_attributes[$name]=$value;
else
returnfalse;
returntrue;
}

设置命名的属性值。 你也可以使用$this->AttributeName来设置属性值。

参见

  • hasAttribute
setDbCriteria() 方法 (可用自 v1.1.3)
public void setDbCriteria(CDbCriteria $criteria)
$criteriaCDbCriteria查询条件
源码: framework/db/ar/CActiveRecord.php#326 (显示) publicfunctionsetDbCriteria($criteria)
{
$this->_c=$criteria;
}

为当前模型设置查询条件.

setIsNewRecord() 方法
public void setIsNewRecord(boolean $value)
$valueboolean该记录是否是新的,就插入时调用save。
源码: framework/db/ar/CActiveRecord.php#809 (显示) publicfunctionsetIsNewRecord($value)
{
$this->_new=$value;
}

设置记录是否是新的。

参见

  • getIsNewRecord
setOldPrimaryKey() 方法 (可用自 v1.1.3)
public void setOldPrimaryKey(mixed $value)
$valuemixed旧主键值。
源码: framework/db/ar/CActiveRecord.php#1265 (显示) publicfunctionsetOldPrimaryKey($value)
{
$this->_pk=$value;
}

设置旧的主键值。

setPrimaryKey() 方法 (可用自 v1.1.0)
public void setPrimaryKey(mixed $value)
$valuemixed新的主键值。如果主键是复合类型, 应提供一个新值做为数组(列名=>列值)。
源码: framework/db/ar/CActiveRecord.php#1233 (显示) publicfunctionsetPrimaryKey($value)
{
$this->_pk=$this->getPrimaryKey();
$table=$this->getMetaData()->tableSchema;
if(is_string($table->primaryKey))
$this->{$table->primaryKey}=$value;
elseif(is_array($table->primaryKey))
{
foreach($table->primaryKeyas$name)
$this->$name=$value[$name];
}
}

设置主键值。 调用此方法后,旧的主键值,可以从oldPrimaryKey得到。

setTableAlias() 方法 (可用自 v1.1.3)
public void setTableAlias(string $alias)
$aliasstring在查询中使用表的别名。别名不应该加引号。
源码: framework/db/ar/CActiveRecord.php#1372 (显示) publicfunctionsetTableAlias($alias)
{
$this->_alias=$alias;
}

设置表在查询中使用的别名。

tableName() 方法
public string tableName()
{return}string返回表名
源码: framework/db/ar/CActiveRecord.php#418 (显示) publicfunctiontableName()
{
returnget_class($this);
}

返回关联的数据库表的名称。 默认情况下,这个方法返回类名作为表名。 你可以覆盖这个方法,如果此列没有命名在这次约定之后。

together() 方法 (可用自 v1.1.4)
public CActiveRecord together()
{return}CActiveRecordAR对象本身。
源码: framework/db/ar/CActiveRecord.php#1658 (显示) publicfunctiontogether()
{
$this->getDbCriteria()->together=true;
return$this;
}

设置CDbCriteria::together属性为true。 这只用于关系AR查询。 请参见CDbCriteria::together更多详细。

update() 方法
public boolean update(array $attributes=NULL)
$attributesarray需要保存的属性列表。默认为null, 这意味着从数据库中加载的所有属性将被保存。
{return}boolean更新是否成功
源码: framework/db/ar/CActiveRecord.php#1052 (显示) publicfunctionupdate($attributes=null)
{
if($this->getIsNewRecord())
thrownewCDbException(Yii::t('yii','Theactiverecordcannotbeupdatedbecauseitisnew.'));
if($this->beforeSave())
{
Yii::trace(get_class($this).'.update()','system.db.ar.CActiveRecord');
if($this->_pk===null)
$this->_pk=$this->getPrimaryKey();
$this->updateByPk($this->getOldPrimaryKey(),$this->getAttributes($attributes));
$this->_pk=$this->getPrimaryKey();
$this->afterSave();
returntrue;
}
else
returnfalse;
}

更新此活动记录所表示的行。 已加载的所有属性都将保存到数据库中。 注意,验证不执行此方法。你可以调用validate执行验证。

updateAll() 方法
public integer updateAll(array $attributes, mixed $condition='', array $params=array ( ))
$attributesarray用于更新的属性列表(name=>$value)。
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数
{return}integer被更新的行数
源码: framework/db/ar/CActiveRecord.php#1693 (显示) publicfunctionupdateAll($attributes,$condition='',$params=array())
{
Yii::trace(get_class($this).'.updateAll()','system.db.ar.CActiveRecord');
$builder=$this->getCommandBuilder();
$criteria=$builder->createCriteria($condition,$params);
$command=$builder->createUpdateCommand($this->getTableSchema(),$attributes,$criteria);
return$command->execute();
}

更新使用指定条件的记录。 参见find()详细说明关于$condition和$params。 注意,属性没有做安全检测和校验。

updateByPk() 方法
public integer updateByPk(mixed $pk, array $attributes, mixed $condition='', array $params=array ( ))
$pkmixed主键值。对多个主键使用数组。复合键,对于每个键的值必须是一个数组(列名=>列值)。
$attributesarray用于更新的属性列表(name=>$value)。
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数
{return}integer被更新的行数
源码: framework/db/ar/CActiveRecord.php#1674 (显示) publicfunctionupdateByPk($pk,$attributes,$condition='',$params=array())
{
Yii::trace(get_class($this).'.updateByPk()','system.db.ar.CActiveRecord');
$builder=$this->getCommandBuilder();
$table=$this->getTableSchema();
$criteria=$builder->createPkCriteria($table,$pk,$condition,$params);
$command=$builder->createUpdateCommand($table,$attributes,$criteria);
return$command->execute();
}

更新指定主键记录的行。 参见find()详细说明关于$condition和$params。 注意,属性没有做安全检测和校验。

updateCounters() 方法
public integer updateCounters(array $counters, mixed $condition='', array $params=array ( ))
$countersarray要更新的计数器(列名=>增量值)
$conditionmixed查询条件或标准。
$paramsarray要绑定到的 SQL 语句的参数
{return}integer被更新的行数
源码: framework/db/ar/CActiveRecord.php#1712 (显示) publicfunctionupdateCounters($counters,$condition='',$params=array())
{
Yii::trace(get_class($this).'.updateCounters()','system.db.ar.CActiveRecord');
$builder=$this->getCommandBuilder();
$criteria=$builder->createCriteria($condition,$params);
$command=$builder->createUpdateCounterCommand($this->getTableSchema(),$counters,$criteria);
return$command->execute();
}

更新的一个或多个计数器。 请注意,除非指定一个条件或标准,这将更新所有数据行。 参见find()详细说明关于$condition和$params。

参见

  • saveCounters
with() 方法
public CActiveRecord with()
{return}CActiveRecordAR对象本身。
源码: framework/db/ar/CActiveRecord.php#1638 (显示) publicfunctionwith()
{
if(func_num_args()>0)
{
$with=func_get_args();
if(is_array($with[0]))//theparameterisgivenasanarray
$with=$with[0];
if(!empty($with))
$this->getDbCriteria()->mergeWith(array('with'=>$with));
}
return$this;
}

指定相关对象应一起载入。 这个方法采取变量的参数。 每个参数指定关系或子关系的名称。例如,

// 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();
应用中声明的关系relations()。

默认情况下,在指定的relations()选项将被用来做关联查询。 为了自定义动态选项,我们应将一个数组参数传递给 with() 方法。 数组的键是关系的名称, 和数组值对应的查询选项。 例如:
Post::model()->with(array(  'author'=>array('select'=>'id, name'),  'comments'=>array('condition'=>'approved=1', 'order'=>'create_time'),
))->findAll();