ShopCMS 开发文档
HFramework 开发文档

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