CActiveFinder


system.db.ar
继承 class CActiveFinder » CComponent
源自 1.0
版本 $Id: CActiveFinder.php 3562 2012-02-13 01:27:06Z qiang.xue $
源码
CActiveFinder实现贪婪加载和延迟加载的关系活动记录。

当使用贪婪加载时,此类提供了与 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;
}

不要调用这个方法。 此方法在内部使用以执行关联查询。 基于给定的数据库条件。