CJoinQuery
| 包 | system.db.ar | 
|---|---|
| 继承 | class CJoinQuery | 
| 可用自 | 1.0 | 
| 源码 | framework/db/ar/CActiveFinder.php | 
CJoinQuery represents a JOIN SQL statement.
公共属性
| 属性 | 类型 | 描述 | 被定义在 | 
|---|---|---|---|
| conditions | array | list of WHERE clauses | CJoinQuery | 
| distinct | boolean | whether to select distinct result set | CJoinQuery | 
| elements | array | list of join element IDs (id=>true) | CJoinQuery | 
| groups | array | list of GROUP BY clauses | CJoinQuery | 
| havings | array | list of HAVING clauses | CJoinQuery | 
| joins | array | list of join statement | CJoinQuery | 
| limit | integer | row limit | CJoinQuery | 
| offset | integer | row offset | CJoinQuery | 
| orders | array | list of ORDER BY clauses | CJoinQuery | 
| params | array | list of query parameters | CJoinQuery | 
| selects | array | list of column selections | CJoinQuery | 
公共方法
| 方法 | 描述 | 被定义在 | 
|---|---|---|
| __construct() | Constructor. | CJoinQuery | 
| createCommand() | Creates the SQL statement. | CJoinQuery | 
| join() | Joins with another join element | CJoinQuery | 
属性详情
conditions
属性
public array $conditions;
list of WHERE clauses
distinct
属性
public boolean $distinct;
whether to select distinct result set
elements
属性
public array $elements;
list of join element IDs (id=>true)
groups
属性
public array $groups;
list of GROUP BY clauses
havings
属性
public array $havings;
list of HAVING clauses
joins
属性
public array $joins;
list of join statement
limit
属性
public integer $limit;
row limit
offset
属性
public integer $offset;
row offset
orders
属性
public array $orders;
list of ORDER BY clauses
params
属性
public array $params;
list of query parameters
selects
属性
public array $selects;
list of column selections
方法详情
__construct()
方法
| 
public void __construct(CJoinElement $joinElement, CDbCriteria $criteria=NULL) | ||
| $joinElement | CJoinElement | The root join tree. | 
| $criteria | CDbCriteria | the query criteria | 
源码: framework/db/ar/CActiveFinder.php#1282 (显示)
public function __construct($joinElement,$criteria=null)
{
    if($criteria!==null)
    {
        $this->selects[]=$joinElement->getColumnSelect($criteria->select);
        $this->joins[]=$joinElement->getTableNameWithAlias();
        $this->joins[]=$criteria->join;
        $this->conditions[]=$criteria->condition;
        $this->orders[]=$criteria->order;
        $this->groups[]=$criteria->group;
        $this->havings[]=$criteria->having;
        $this->limit=$criteria->limit;
        $this->offset=$criteria->offset;
        $this->params=$criteria->params;
        if(!$this->distinct && $criteria->distinct)
            $this->distinct=true;
    }
    else
    {
        $this->selects[]=$joinElement->getPrimaryKeySelect();
        $this->joins[]=$joinElement->getTableNameWithAlias();
        $this->conditions[]=$joinElement->getPrimaryKeyRange();
    }
    $this->elements[$joinElement->id]=true;
}
Constructor.
createCommand()
方法
| 
public CDbCommand createCommand(CDbCommandBuilder $builder) | ||
| $builder | CDbCommandBuilder | the command builder | 
| {return} | CDbCommand | DB command instance representing the SQL statement | 
源码: framework/db/ar/CActiveFinder.php#1340 (显示)
public function createCommand($builder)
{
    $sql=($this->distinct ? 'SELECT DISTINCT ':'SELECT ') . implode(', ',$this->selects);
    $sql.=' FROM ' . implode(' ',array_unique($this->joins));
    $conditions=array();
    foreach($this->conditions as $condition)
        if($condition!=='')
            $conditions[]=$condition;
    if($conditions!==array())
        $sql.=' WHERE (' . implode(') AND (',$conditions).')';
    $groups=array();
    foreach($this->groups as $group)
        if($group!=='')
            $groups[]=$group;
    if($groups!==array())
        $sql.=' GROUP BY ' . implode(', ',$groups);
    $havings=array();
    foreach($this->havings as $having)
        if($having!=='')
            $havings[]=$having;
    if($havings!==array())
        $sql.=' HAVING (' . implode(') AND (',$havings).')';
    $orders=array();
    foreach($this->orders as $order)
        if($order!=='')
            $orders[]=$order;
    if($orders!==array())
        $sql.=' ORDER BY ' . implode(', ',$orders);
    $sql=$builder->applyLimit($sql,$this->limit,$this->offset);
    $command=$builder->getDbConnection()->createCommand($sql);
    $builder->bindValues($command,$this->params);
    return $command;
}
Creates the SQL statement.
join()
方法
| 
public void join(CJoinElement $element) | ||
| $element | CJoinElement | the element to be joined | 
源码: framework/db/ar/CActiveFinder.php#1312 (显示)
public function join($element)
{
    if($element->slave!==null)
        $this->join($element->slave);
    if(!empty($element->relation->select))
        $this->selects[]=$element->getColumnSelect($element->relation->select);
    $this->conditions[]=$element->relation->condition;
    $this->orders[]=$element->relation->order;
    $this->joins[]=$element->getJoinCondition();
    $this->joins[]=$element->relation->join;
    $this->groups[]=$element->relation->group;
    $this->havings[]=$element->relation->having;
    if(is_array($element->relation->params))
    {
        if(is_array($this->params))
            $this->params=array_merge($this->params,$element->relation->params);
        else
            $this->params=$element->relation->params;
    }
    $this->elements[$element->id]=true;
}
Joins with another join element