[TOC]
### 创建查询生成器
~~~php
$db = \Lying::$maker->db;
$query = $db->query();
~~~
### 使用查询生成器
~~~php
$db = \Lying::$maker->db;
$query = $db->query();
//select `id`,`username`,`sex` from `user` where id=1
$query->select('id,username,sex')
->from('user')
->where('id=1');
//select `id`,`username` as `name`,`sex` from `user` where id=1
$query->select(['id', 'name'=>'username', 'sex'])
->from(['user'])
->where(['id'=>1]);
//SELECT `u`.`id`, `u`.`username` AS `name`, `sex` FROM `user` AS `u` WHERE `id`=1
$query->select(['u.id', 'name'=>'u.username', 'u.sex'])
->from(['u'=>'user'])
->where(['id'=>1]);
//支持的查询方法,具体使用方式请看方法详解
$query->select()
->distinct()
->from()
->where()
->andWhere()
->orWhere()
->join()
->leftJoin()
->rightJoin()
->innerJoin()
->groupBy()
->having()
->andHaving()
->orHaving()
->orderBy()
->limit()
->union();
~~~
> 具体使用方式请看方法详解 [查询方法详解](queryMethod.md)
### 获取查询SQL和将要绑定的参数
~~~php
$db = \Lying::$maker->db;
$query = $db->query();
//select `id`,`username`,`sex` from `user` where id=1
$query->select('id,username,sex')
->from('user')
->where(['id'=>1]);
list($sql, $params) = $query->build();
//取出来的sql并不是规范的sql,但是可以用此方式执行:
$db->prepare($sql, $params)->one();
~~~
### 获取查询结果
~~~php
$db = \Lying::$maker->db;
$query = $db->query();
//select `id`,`username`,`sex` from `user` where id=1
$query->select('id,username,sex')
->from('user')
->where(['id'=>1]);
$query->one(); //返回结果集中的一条记录
$query->all(); //返回所有查询结果的数组
$query->scalar(); //从结果集中的下一行返回单独的一个字段值,查询结果为标量
$query->column(); //从结果集中的取出第N列的值
$query->count(); //获取指定列的记录数
$query->sum(); //获取指定列所有值之和
$query->max(); //获取指定列的最大值
$query->min(); //获取指定列的最小值
$query->avg(); //获取指定列的平均值
$query->inc(); //字段值自增
$query->dec(); //字段值自减
~~~
### 插入/更新/删除操作
#### 插入数据
插入单条数据
~~~php
$db = \Lying::$maker->db;
$query = $db->query();
$data = [
'username' => 'user1',
'sex' => 1,
'password' => '123456',
];
$rows = $query->insert('user', $data); //insert into
$rows = $query->insert('{{%user}}', $data); //use table name with prefix
$rows = $query->insert('user', $data, true); //replace into
~~~
批量插入数据
~~~php
$db = \Lying::$maker->db;
$query = $db->query();
$fields = ['name', 'sex'];
$datas = [
['user1', 1],
['user2', 0],
['user3', 1],
];
$rows = $query->batchInsert('user', $fields, $datas); //insert into
$rows = $query->batchInsert('{{%user}}', $fields, $datas); //use table name with prefix
$rows = $query->batchInsert('user', $fields, $datas, true); //replace into
~~~
> 请注意,批量插入使用拼接sql的方式,受限于sql语句的最大长度!
#### 更新数据
~~~php
$db = \Lying::$maker->db;
$query = $db->query();
$where = ['>', 'id', 100];
$data = ['money'=>'500'];
$rows = $query->update('user', $data, $where);
//或者
$rows = $query->where($where)->update('{{%user}}', $data); //use table name with prefix
~~~
> where的使用方式请参考where函数的详细说明
#### 删除操作
~~~php
$db = \Lying::$maker->db;
$query = $db->query();
$where = ['id'=>100];
$rows = $query->delete('user', $where);
//或者
$rows = $query->where($where)->delete('{{%user}}'); //use table name with prefix
~~~
> where的使用方式请参考where函数的详细说明
### 函数参考
~~~php
/**
* 设置要查询的字段
* ```php
* select('id, lying.sex, count(id) as count')
* select(['id', 'lying.sex', 'count'=>'count(id)', 'q'=>$query])
* 其中$query为Query实例,必须指定子查询的别名,只有$columns为数组的时候才支持子查询
* 注意:当你使用到包含逗号的数据库表达式的时候,你必须使用数组的格式,以避免自动的错误的引号添加
* select(["CONCAT(first_name, ' ', last_name) AS full_name", 'email']);
* ```
* @param string|array $columns 要查询的字段,当没有设置要查询的字段的时候,默认为'*'
* @return $this
*/
public function select($columns);
~~~
* * * * *
~~~php
/**
* 去除重复行
* @param bool $distinct 是否去重
* @return $this
*/
public function distinct($distinct = true);
~~~
* * * * *
~~~php
/**
* 设置要查询的表
* ```php
* from('user, lying.admin as ad')
* from(['user', 'ad'=>'lying.admin', 'q'=>$query])
* 其中$query为Query实例,必须指定子查询的别名,只有$tables为数组的时候才支持子查询
* ```
* @param string|array $tables 要查询的表
* @return $this
*/
public function from($tables);
~~~
* * * * *
~~~php
/**
* 设置表连接,可多次调用
* @param string $type 连接类型,可以为'left join','right join','inner join'
* @param string|array $table 要连接的表,子查询用数组形式表示,键为别名,值为Query实例
* @param string|array $on 条件,如果要使用'字段1 = 字段2'的形式,请用字符串带入,用数组的话'字段2'将被解析为绑定参数
* @param array $params 绑定的参数,应为key=>value形式
* @return $this
*/
public function join($type, $table, $on = null, $params = []);
~~~
* * * * *
~~~php
/**
* 设置表左连接,可多次调用
* @param string|array $table 要连接的表,子查询用数组形式表示,键为别名,值为Query实例
* @param string|array $on 条件,如果要使用'字段1 = 字段2'的形式,请用字符串带入,用数组的话'字段2'将被解析为绑定参数
* @param array $params 绑定的参数,应为key=>value形式
* @return $this
*/
public function leftJoin($table, $on = null, $params = []);
~~~
* * * * *
~~~php
/**
* 设置表右连接,可多次调用
* @param string|array $table 要连接的表,子查询用数组形式表示,键为别名,值为Query实例
* @param string|array $on 条件,如果要使用'字段1 = 字段2'的形式,请用字符串带入,用数组的话'字段2'将被解析为绑定参数
* @param array $params 绑定的参数,应为key=>value形式
* @return $this
*/
public function rightJoin($table, $on = null, $params = []);
~~~
* * * * *
~~~php
/**
* 设置表连接,可多次调用
* @param string|array $table 要连接的表,子查询用数组形式表示,键为别名,值为Query实例
* @param string|array $on 条件,如果要使用'字段1 = 字段2'的形式,请用字符串带入,用数组的话'字段2'将被解析为绑定参数
* @param array $params 绑定的参数,应为key=>value形式
* @return $this
*/
public function innerJoin($table, $on = null, $params = []);
~~~
* * * * *
~~~php
/**
* 设置查询条件
* ```php
* 如果要使用'字段1 = 字段2'的形式,请用字符串带入,用数组的话'字段2'将被解析为绑定参数
* where("user.id = admin.id and name = :name", [':name'=>'lying']);
* where(['id'=>1, 'name'=>'lying']);
* where(['id'=>[1, 2, 3], ['or', 'name'=>'lying', 'sex'=>1]]);
* ```
* @param string|array $condition 要查询的条件
* @param array $params 当$condition为字符串时,绑定参数的数组
* @return $this
*/
public function where($condition, $params = []);
~~~
* * * * *
~~~php
/**
* 添加AND条件
* @param string|array $condition 要查询的条件
* @param array $params 当$condition为字符串时,绑定参数的数组
* @return $this
* @see where()
*/
public function andWhere($condition, $params = []);
~~~
* * * * *
~~~php
/**
* 添加OR条件
* @param string|array $condition 要查询的条件
* @param array $params 当$condition为字符串时,绑定参数的数组
* @return $this
* @see where()
*/
public function orWhere($condition, $params = []);
~~~
* * * * *
~~~php
/**
* 设置分组查询
* ```php
* groupBy('id, sex');
* groupBy(['id', 'sex']);
* ```
* @param string|array 要分组的字段
* @return $this
*/
public function groupBy($columns);
~~~
* * * * *
~~~php
/**
* 聚合筛选
* @param string|array $condition 参见where()
* @param array $params 参见where()
* @return $this
* @see where()
*/
public function having($condition, $params = []);
~~~
* * * * *
~~~php
/**
* 添加AND条件
* @param string|array $condition 要查询的条件
* @param array $params 当$condition为字符串时,绑定参数的数组
* @return $this
* @see having()
*/
public function andHaving($condition, $params = []);
~~~
* * * * *
~~~php
/**
* 添加OR条件
* @param string|array $condition 要查询的条件
* @param array $params 当$condition为字符串时,绑定参数的数组
* @return $this
* @see having()
*/
public function orHaving($condition, $params = []);
~~~
* * * * *
~~~php
/**
* 设置排序
* ```php
* orderBy('id, name desc');
* orderBy(['id'=>SORT_DESC, 'name']);
* ```
* @param string|array $columns 要排序的字段和排序方式
* @return $this
*/
public function orderBy($columns);
~~~
* * * * *
~~~php
/**
* 设置限制查询的条数
* ```php
* limit(10);
* limit(5, 20);
* ```
* @param int $offset 偏移的条数,如果只提供此参数,则等同于limit(0, $offset)
* @param int $limit 限制的条数
* @return $this
*/
public function limit($offset, $limit = null);
~~~
* * * * *
~~~php
/**
* 设置联合查询,可多次使用
* @param Query $query 子查询
* @param bool $all 是否使用UNION ALL,默认false
* @return $this
*/
public function union(Query $query, $all = false);
~~~
* * * * *
~~~php
/**
* 组建SQL语句
* @param array $params 传入参数
* @return array 返回[$statement, $params]
*/
public function build($params = []);
~~~
* * * * *
~~~php
/**
* 返回结果集中的一条记录
* @param bool $obj 是否返回对象(默认返回关联数组)
* @param string $class 要实例化的对象,不写默认为匿名对象
* @return mixed 成功返回查询结果,失败返回false
*/
public function one($obj = false, $class = null);
~~~
* * * * *
~~~php
/**
* 返回所有查询结果的数组
* @param bool $obj 是否返回对象(默认返回关联数组)
* @param string $class 要实例化的对象,不写默认为匿名对象
* @return mixed 成功返回查询结果,失败返回false
*/
public function all($obj = false, $class = null);
~~~
* * * * *
~~~php
/**
* 从结果集中的下一行返回单独的一个字段值,查询结果为标量
* @param int $columnNumber 你想从行里取回的列的索引数字,以0开始
* @return mixed 返回查询结果,查询结果为标量
*/
public function scalar($columnNumber = 0);
~~~
* * * * *
~~~php
/**
* 从结果集中的取出第N列的值
* @param int $columnNumber 你想从行里取回的列的索引数字,以0开始
* @return mixed 返回查询结果
*/
public function column($columnNumber = 0);
~~~
* * * * *
~~~php
/**
* 获取指定列的记录数
* @param string $column 要统计的列名
* @return bool|int 返回记录数
*/
public function count($column = '*');
~~~
* * * * *
~~~php
/**
* 获取指定列所有值之和
* @param string $column 要相加的列名
* @return bool|float 返回相加后的值
*/
public function sum($column);
~~~
* * * * *
~~~php
/**
* 获取指定列的最大值
* @param string $column 计算的列名
* @return bool|float 最大值
*/
public function max($column);
~~~
* * * * *
~~~php
/**
* 获取指定列的最小值
* @param string $column 计算的列名
* @return bool|float 最小值
*/
public function min($column);
~~~
* * * * *
~~~php
/**
* 获取指定列的平均值
* @param string $column 计算的列名
* @return bool|float 平均值
*/
public function avg($column);
~~~
* * * * *
~~~php
/**
* 字段值自增
* ```php
* $query->from('user')->where(['id'=>1])->inc('num');
* ```
* @param string $field 字段名
* @param int $num 自增的值,必须为正整数
* @return bool|int 成功返回受影响的行数,失败返回false
*/
public function inc($field, $num = 1);
~~~
* * * * *
~~~php
/**
* 字段值自减
* ```php
* $query->from('user')->where(['id'=>1])->dec('num');
* ```
* @param string $field 字段名
* @param int $num 自减的值,必须为正整数
* @return bool|int 成功返回受影响的行数,失败返回false
*/
public function dec($field, $num = 1);
~~~
* * * * *
~~~php
/**
* 插入一条数据
* @param string $table 要插入的表名
* @param array $datas 要插入的数据,(name => value)形式的数组
* 当然value可以是子查询,Query的实例,但是查询的表不能和插入的表是同一个
* @param bool $replace 是否用REPLACE INTO
* @return int|bool 返回受影响的行数,有可能是0行,失败返回false
*/
public function insert($table, $datas, $replace = false);
~~~
* * * * *
~~~php
/**
* 批量插入数据
* ```php
* batchInsert('user', ['name', 'sex'], [
* ['user1', 1],
* ['user2', 0],
* ['user3', 1],
* ])
* ```
* @param string $table 要插入的表名
* @param array $columns 要插入的字段名
* @param array $datas 要插入的数据,应为一个二维数组
* @param bool $replace 是否用REPLACE INTO
* @return int|bool 返回受影响的行数,有可能是0行,失败返回false
*/
public function batchInsert($table, $columns, $datas, $replace = false);
~~~
* * * * *
~~~php
/**
* 更新数据
* @param string $table 要更新的表名
* @param array $datas 要更新的数据,(name => value)形式的数组
* 当然value可以是子查询,Query的实例,但是查询的表不能和更新的表是同一个
* @param string|array $condition 更新的条件,参见where()
* @param array $params 条件的参数,参见where()
* @return int|bool 返回受影响的行数,有可能是0行,失败返回false
*/
public function update($table, $datas, $condition = '', $params = []);
~~~
* * * * *
~~~php
/**
* 删除数据
* @param string $table 要删除的表名
* @param string|array $condition 删除的条件,参见where()
* @param array $params 条件的参数,参见where()
* @return int|bool 返回受影响的行数,有可能是0行,失败返回false
*/
public function delete($table, $condition = '', $params = []);
~~~
- 序言
- 更新日志
- 安装
- 规范
- 常量
- 配置
- 自动加载
- MVC
- 模块
- 控制器
- 模型
- 视图
- php原生模板
- 模板引擎
- 变量输出
- 模板注释
- 模板继承
- 模板引用
- 流程控制
- 原样输出
- 服务组件
- Hook组件
- Request组件
- Router组件
- Cookie组件
- Encrypter组件
- Dispatch组件
- Response组件
- View组件
- Session组件
- Helper组件
- 数据分页
- 数据验证
- Logger组件
- Cache组件
- Redis组件
- Connection组件
- 执行sql语句
- 查询生成器
- 查询方法详解
- Schema
- Captcha组件
- CLI
- CLI工具
- 事件
- 类事件
- 实例事件
- 全局事件
- 助手函数
- 扩展
- 异常
- 部署
- Apache
- Nginx
- IIS
- 虚拟主机