4.5 构造查询条件-条件对象
条件对象也是一种查询数据库的方式,对象中可以构造查询语句、构造连表查询、构造各种复杂的查询条件。
构造的对象主要用于模型中的查询条件参数使用,与关联数组查询条件一样,在实际执行SQL语句时,也是以参数绑定的形式执行的。
构造的过程,是基于
HDbCondition的实例进行的,此类位于 Framework/extension/HDbCondition.php,创建实例的过程,实际上是在HDb类中以单例模式的形式创建的,因此,您多次创建实例,并不会创建多个对象。。
在您的项目中,您可以在任何位置使用下面的语句创建实例:
<?php
H::db()-> condition();
?>
在模型类中,您也可以用下面的方法创建实例:
<?php
$this-> createCondition();//$this 指当前模型类
?>
下面以一个模型类为例,举例说明如下,注释中已逐行解释:
<?php
class User extends HModel{
/**
* 设置默认操作的数据表
*/
protected function setTable(){
return '{order}';
}
/**
* 打印用户的最新10条订单
*/
public function topOrder(){
$Condition = $this->createCondition() //创建条件对象实例,注意此处结尾没有分号(下同)
->select('u.id, u.username, o.title') //设置查询的栏目,此行可以删除,删除默认表的全部栏目,相当于 select *
->from('{user} u') //设置查询的表,此行可以删除,删除表示当前的模型默认的数据表 {order}
->leftJoin('{order} o ', 'u.id=o.user_id') //连表查询,如果没有连表查询,此行也可以删除
->where(array('u.id = 30')) //设置查询条件,参数为数组,详情查看条件数组相关的章节,如果不这只查询条件,此行也可以删除
->limit(0, 10) //设置最多查询的行数 此行也可以删除
->orderBy('o.id desc');//设置排序方式 此行也可以删除
$rows = $this->getRows($Condition); //条件对象的使用
print_r($rows);
}
}
条件对象类提供的全部方法如下:
/**
* HFramework 构造SQL查询语句和查询条件类
*/
class HDbCondition{
/**
* 构造SELECT节 特别注意:不得含有select from关键词
* @param string $select 查询栏目,如:id,username,realname 或者 u.id,u.username,u.realname as name
* @return object 当前对象
**/
public function select($select = '*')
/**
* 构造FROM节
* @param string $table 表名
* @return object 当前对象
*/
public function from($table)
/**
* 构造LEFT JOIN节
* @param string $table 被关联的表名,格式可以是tableName 或者 tableName t1
* @param string $on, 格式可以是 tableName.user_id=user.id 或者 t1.user_id = u.id
* @return object 当前对象
*/
public function leftJoin($table, $on)
/**
* 构造RIGHT JOIN节
* @param string $table 被关联的表名,格式可以是tableName 或者 tableName t1
* @param string $on, 格式可以是 tableName.user_id=user.id 或者 t1.user_id = u.id
* @return object 当前对象
*/
public function rightJoin($table, $on)
/**
* 构造RIGHT JOIN节
* @param string $table 被关联的表名,格式可以是tableName 或者 tableName t1
* @param string $on, 格式可以是 tableName.user_id=user.id 或者 t1.user_id = u.id
* @return object 当前对象
*/
public function innerJoin($table, $on)
/**
* @param array $data mixed 条件数组:详情请参考创建条件数组的介绍
* 其中如果指定@conn项目,表示关联方式,不指定表示 AND 关键词与前一个条件关联
* 举例说明:
* 一维数组应用1:
* $data = array('a'=>1, 'b'=>2)
* $mode = '='
* 创建的查询语句为: ('a'=1 AND 'b'=2)
*
* 一维数组应用2:
* $data = array('a'=>1, 'b'=>2', '@conn'=>'OR');
* 创建的查询语句为: (a=1 OR b=2)
*
* 二维数组应用1
* $data = array(
* '@conn'=>'AND'
* 'a'=>1,
* 'b'=>2
* array('c1'=>1, 'c2'=>2, '@exp'=>'>', '@conn'=>'OR'),
* )
* 创建的查询语句为: ((a=1 OR b=2) AND (c1>1 OR c2>2)
* @return object 当前对象
*/
public function where($data)
/**
* 构造联表查询
* @param string $orderby 排序方式 如:id desc
* @return object 当前对象
*/
public function orderby($orderby='')
/**
* 构造联表查询
* @param int $offset 偏移量
* @param int $limit 最大记录数
* @return object 当前对象
*/
public function limit($offset, $limit)
/**
* 设置页码
* @param int $offset 偏移量
* @param int $limit 最大记录数
* @return object 当前对象
*/
public function page($page, $rows)
/**
* 创建 SQL 的查询语句和参数绑定数组
* @param $params array sql主语句中已存在的绑定数组,
* @return array 结构为 array('sql'=>sql, 'params'=>array())
*/
public function createSelect()
/**
* 创建 SQL 的插入语句和参数绑定数组
* @param $params array sql主语句中已存在的绑定数组,
* @return array 结构为 array('sql'=>sql, 'params'=>array())
*/
public function createInsert()
/**
* 创建SQL删除语句和参数绑定数组
* @param $params array sql主语句中已存在的绑定数组,
* @return array 结构为 array('sql'=>sql, 'params'=>array())
*/
public function createDelete()
/**
* 创建SQL更新语句和参数绑定数组
* @param $params array sql主语句中已存在的绑定数组,
* @return array 结构为 array('sql'=>sql, 'params'=>array())
*/
public function createUpdate()
/**
* 创建SQL查询条件语句和参数
* @param $data 已设置的查询条件
* @return array 返回使用问号占位符的预处理语句 和 绑定参数
*/
public function createWhere($data=array())
/**
* 清空已设置的所有参数,以防污染下一次查询
* 因为是单利模式,进行实例化,如果不清空,下次使用时会带上当前的参数
* @return void 无返回值
*/
public function clear()
/**
* 追加构造信息
* @param array $data 一维关联数组,键名表示字段名,键值表示字段值
* @return object 当前对象
*/
private function data($data)
/**
* 设置安全的SQL查询
* @param $key string 查询键名
* @return string 引号括起来的键名
*/
private function safeKey($key)
/**
* 创建LIMIT节
* @param int $offset 偏移量
* @param int $limit 最大记录数
* @return object 当前对象
*/
public function createLimit($page=0, $rows=0)
/**
* 设置待操作的数据 使用方法见 HModel类 updatebyKey方法
* @param array $data 一维关联数组,键名表示字段名,键值表示字段值
* @return object 当前对象
*/
public function data($data)
关键词:构造SQL语句 条件对象 MYSQL查询对象 单例模式
阅读:2346 |
发布时间:2019-01-01 22:34