包 | system.db.ar |
---|---|
继承 | class CActiveFinder » CComponent |
源自 | 1.0 |
版本 | $Id: CActiveFinder.PHP 3562 2012-02-13 01:27:06Z qiang.xue $ |
源码 |
CActiveFinder实现贪婪加载和延迟加载的关系活动记录。
当使用贪婪加载时,此类提供了与 CActiveRecord相同的查询方法。
当使用贪婪加载时,此类提供了与 CActiveRecord相同的查询方法。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
baseLimited | boolean | 基础模型有否限制或偏移。 在内部使用此属性 | CActiveFinder |
joinAll | boolean | 一次全部连接所有表。默认为false。 在内部使用此属性。 | CActiveFinder |
公共方法
方法 | 描述 | 定义在 |
---|---|---|
__call() | 如果类中没有调的方法名,则调用这个方法。 | CComponent |
__construct() | 构造函数。 | CActiveFinder |
__get() | 返回一个属性值、一个事件处理程序列表或一个行为名称。 | CComponent |
__isset() | 检查一个属性是否为null。 | CComponent |
__set() | 设置一个组件的属性值。 | CComponent |
__unset() | 设置一个组件的属性为null。 | CComponent |
asa() | 返回这个名字的行为对象。 | CComponent |
attachBehavior() | 附加一个行为到组件。 | CComponent |
attachBehaviors() | 附加一个行为列表到组件。 | CComponent |
attachEventHandler() | 为事件附加一个事件处理程序。 | CComponent |
canGetProperty() | 确定属性是否可读。 | CComponent |
canSetProperty() | 确定属性是否可写。 | CComponent |
count() | 此方法在内部被调用。 | CActiveFinder |
detachBehavior() | 从组件中分离一个行为。 | CComponent |
detachBehaviors() | 从组件中分离所有行为。 | CComponent |
detachEventHandler() | 分离一个存在的事件处理程序。 | CComponent |
disableBehavior() | 禁用一个附加行为。 | CComponent |
disableBehaviors() | 禁用组件附加的所有行为。 | CComponent |
enableBehavior() | 启用一个附加行为。 | CComponent |
enableBehaviors() | 启用组件附加的所有行为。 | CComponent |
evaLuateExpression() | 计算一个PHP表达式,或根据组件上下文执行回调。 | CComponent |
findAllBySql() | 此方法在内部被调用。 | CActiveFinder |
findBySql() | 此方法在内部被调用。 | CActiveFinder |
getEventHandlers() | 返回一个事件的附加处理程序列表。 | CComponent |
hasEvent() | 确定一个事件是否定义。 | CComponent |
hasEventHandler() | 检查事件是否有附加的处理程序。 | CComponent |
hasProperty() | 确定属性是否被定义。 | CComponent |
lazyFind() | 查找指定活动记录的相关对象。 | CActiveFinder |
query() | 不要调用这个方法。 此方法在内部使用以执行关联查询。 | CActiveFinder |
raiseEvent() | 发起一个事件。 | CComponent |
属性详细
baseLimited
属性
public boolean $baseLimited;
基础模型有否限制或偏移。 在内部使用此属性
joinAll
属性
public boolean $joinAll;
一次全部连接所有表。默认为false。 在内部使用此属性。
方法详细
__construct()
方法
public void __construct(CActiveRecord $model, mixed $with)
| ||
$model | CActiveRecord | 初始化active finding process的model |
$with | mixed | 实时查询的关系名 |
public function __construct($model,$with)
{
$this->_builder=$model->getCommandBuilder();
$this->_joinTree=new CJoinElement($this,$model);
$this->buildJoinTree($this->_joinTree,$with);
}
构造函数。 一个join树的建立基于声明的活动记录之间的关系。
count()
方法
public string count(CDbCriteria $criteria)
| ||
$criteria | CDbCriteria | 查询条件 |
{return} | string |
public function count($criteria)
{
Yii::trace(get_class($this->_joinTree->model).'.count() eagerly','system.db.ar.CActiveRecord');
$this->joinAll=$criteria->together!==true;
$alias=$criteria->alias===null ? 't' : $criteria->alias;
$this->_joinTree->tableAlias=$alias;
$this->_joinTree->rawTableAlias=$this->_builder->getSchema()->quoteTableName($alias);
$n=$this->_joinTree->count($criteria);
$this->destroyJoinTree();
return $n;
}
此方法在内部被调用。
findAllBySql()
方法
public CActiveRecord[] findAllBySql(string $sql, array $params=array (
))
| ||
$sql | string | SQL 语句 |
$params | array | 绑定 SQL 语句的参数 |
{return} | CActiveRecord[] |
public function findAllBySql($sql,$params=array())
{
Yii::trace(get_class($this->_joinTree->model).'.findAllBySql() eagerly','system.db.ar.CActiveRecord');
if(($rows=$this->_builder->createSqlCommand($sql,$params)->queryAll())!==array())
{
$baseRecords=$this->_joinTree->model->populateRecords($rows,false);
$this->_joinTree->beforeFind(false);
$this->_joinTree->findWitHbase($baseRecords);
$this->_joinTree->afterFind();
$this->destroyJoinTree();
return $baseRecords;
}
else
{
$this->destroyJoinTree();
return array();
}
}
此方法在内部被调用。
findBySql()
方法
public CActiveRecord findBySql(string $sql, array $params=array (
))
| ||
$sql | string | SQL 语句 |
$params | array | 参数绑定到此 SQL 语句 |
{return} | CActiveRecord |
public function findBySql($sql,$params=array())
{
Yii::trace(get_class($this->_joinTree->model).'.findBySql() eagerly','system.db.ar.CActiveRecord');
if(($row=$this->_builder->createSqlCommand($sql,$params)->queryRow())!==false)
{
$baseRecord=$this->_joinTree->model->populateRecord($row,false);
$this->_joinTree->beforeFind(false);
$this->_joinTree->findWithBase($baseRecord);
$this->_joinTree->afterFind();
$this->destroyJoinTree();
return $baseRecord;
}
else
$this->destroyJoinTree();
}
此方法在内部被调用。
lazyFind()
方法
public void lazyFind(CActiveRecord $baseRecord)
| ||
$baseRecord | CActiveRecord | 要被载入的基本记录相关对象 |
public function lazyFind($baseRecord)
{
$this->_joinTree->lazyFind($baseRecord);
if(!empty($this->_joinTree->children))
{
$child=reset($this->_joinTree->children);
$child->afterFind();
}
$this->destroyJoinTree();
}
查找指定活动记录的相关对象。 该方法在内部被CActiveRecord触发,支持懒惰加载.
query()
方法
public mixed query(CDbCriteria $criteria, boolean $all=false)
| ||
$criteria | CDbCriteria | 该数据库条件 |
$all | boolean | 是否带回所有记录 |
{return} | mixed | 查询结果 |
public function query($criteria,$all=false)
{
$this->joinAll=$criteria->together===true;
$this->_joinTree->beforeFind(false);
if($criteria->alias!='')
{
$this->_joinTree->tableAlias=$criteria->alias;
$this->_joinTree->rawTableAlias=$this->_builder->getSchema()->quoteTableName($criteria->alias);
}
$this->_joinTree->find($criteria);
$this->_joinTree->afterFind();
if($all)
{
$result = array_values($this->_joinTree->records);
if ($criteria->index!==null)
{
$index=$criteria->index;
$array=array();
foreach($result as $object)
$array[$object->$index]=$object;
$result=$array;
}
}
else if(count($this->_joinTree->records))
$result = reset($this->_joinTree->records);
else
$result = null;
$this->destroyJoinTree();
return $result;
}
不要调用这个方法。 此方法在内部使用以执行关联查询。 基于给定的数据库条件。