CJoinQuery
优质
小牛编辑
137浏览
2023-12-01
所有包 | 属性 | 方法
CJoinQuery代表着一个关联查询 SQL 语句。
源码: framework/db/ar/CActiveFinder.php#1265 (显示)
源码: framework/db/ar/CActiveFinder.php#1323 (显示)
源码: framework/db/ar/CActiveFinder.php#1295 (显示)
包 | system.db.ar |
---|---|
继承 | class CJoinQuery |
源自 | 1.0 |
版本 | $Id: CActiveFinder.php 3562 2012-02-13 01:27:06Z qiang.xue $ |
源码 | framework/db/ar/CActiveFinder.php |
公共属性
隐藏继承属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
conditions | array | WHERE 子句列表 | CJoinQuery |
distinct | boolean | 是否要选择不同的结果集 | CJoinQuery |
elements | array | 连接元素的ID列表(id=>true) | CJoinQuery |
groups | array | GROUP BY 子句列表 | CJoinQuery |
havings | array | HAVING子句列表 | CJoinQuery |
joins | array | 关联语句列表 | CJoinQuery |
limit | integer | 行limit | CJoinQuery |
offset | integer | 行偏移 | CJoinQuery |
orders | array | ORDER BY 子句列表 | CJoinQuery |
params | array | 查询参数的列表 | CJoinQuery |
selects | array | 字段选择列表 | CJoinQuery |
公共方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
__construct() | 构造函数。 | CJoinQuery |
createCommand() | 创建一条SQL语句。 | CJoinQuery |
join() | 连接到另外一个关联查询节点元素。 | CJoinQuery |
属性详细
conditions 属性 public array $conditions;WHERE 子句列表
distinct 属性 public boolean $distinct;是否要选择不同的结果集
elements 属性 public array $elements;连接元素的ID列表(id=>true)
groups 属性 public array $groups;GROUP BY 子句列表
havings 属性 public array $havings;HAVING子句列表
joins 属性 public array $joins;关联语句列表
limit 属性 public integer $limit;行limit
offset 属性 public integer $offset;行偏移
orders 属性 public array $orders;ORDER BY 子句列表
params 属性 public array $params;查询参数的列表
selects 属性 public array $selects;字段选择列表
方法详细
__construct() 方法public void __construct(CJoinElement $joinElement, CDbCriteria $criteria=NULL) | ||
$joinElement | CJoinElement | 查询树的根节点元素。 |
$criteria | CDbCriteria | 查询条件 |
publicfunction__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;
}
构造函数。
createCommand() 方法public string createCommand(CDbCommandBuilder $builder) | ||
$builder | CDbCommandBuilder | 命令生成器 |
{return} | string | SQL语句 |
publicfunctioncreateCommand($builder)
{
$sql=($this->distinct?'SELECTDISTINCT':'SELECT').implode(',',$this->selects);
$sql.='FROM'.implode('',$this->joins);
$conditions=array();
foreach($this->conditionsas$condition)
if($condition!=='')
$conditions[]=$condition;
if($conditions!==array())
$sql.='WHERE('.implode(')AND(',$conditions).')';
$groups=array();
foreach($this->groupsas$group)
if($group!=='')
$groups[]=$group;
if($groups!==array())
$sql.='GROUPBY'.implode(',',$groups);
$havings=array();
foreach($this->havingsas$having)
if($having!=='')
$havings[]=$having;
if($havings!==array())
$sql.='HAVING('.implode(')AND(',$havings).')';
$orders=array();
foreach($this->ordersas$order)
if($order!=='')
$orders[]=$order;
if($orders!==array())
$sql.='ORDERBY'.implode(',',$orders);
$sql=$builder->applyLimit($sql,$this->limit,$this->offset);
$command=$builder->getDbConnection()->createCommand($sql);
$builder->bindValues($command,$this->params);
return$command;
}
创建一条SQL语句。
join() 方法public void join(CJoinElement $element) | ||
$element | CJoinElement | 等待联接的元素 |
publicfunctionjoin($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;
}
连接到另外一个关联查询节点元素。