## 1. 单条数据查询 find()
默认返回一维数组:
$m = D('user');
$where['id'] = 1;
$user = $m->where($where)->find();
查询某一字段的值:
$m = D('user');
$where['id'] = 1;
$username = $m->where($where)->find('username'); //返回 username 字段的值 (字符串)
## 2. 多条数据查询:
默认返回二维数组
$m = D('user');
$where['id >'] = 1;
$user = $m->where($where)->select();
查询某一字段的值:
$m = D('user');
$where['id >'] = 1;
$username = $m->where($where)->select('username'); //返回 username 字段的值 (一维数组)
## 3. 指定返回字段
field($field)
$field:数组或字符串
$field 为索引数组时返回对应数组值的字段
$field 为关联数组时返回对应数组键名的字段,字段名被转为数组键值(指定字段别名)
$field 为字符串时将保持原样,框架不做解析
$m = D('user');
$where['id >'] = 1;
$field = ['id','username','age']; //指定只返回 id,username,age 字段
$user = $m->field($field)->where($where)->select();
**指定所返回字段的别名:**
$m = D('user');
$where['id >'] = 1;
$field = ['id','username'=>'name','age']; //指定 username 字段返回的别名是 name
$user = $m->field($field)->where($where)->select();
**返回除了某字段之外的所有字段:**
$m = D('user');
$field = ['EXCEPT'=>'username,age']; //使用 EXCEPT 排除字段
$field = ['EXCEPT'=>'username,age','code'=>'usercode']; //排除 `username`和`age` 字段 并且将`code`字段转成 usercode
$user = $m->field($field)->where($where)->select();
**使用函数**
$m = D('user');
$where['id >'] = 1;
$field = ['SUM(point)'=>'totalpoint']; //point 字段求和并指定返回别名是 totalpoint
$user = $m->field($field)->where($where)->select();
## 4. 设置返回数据条数
$m = D('user');
$user = $m->limit(10)->select();
$user = $m->limit(6,10)->select();
## 5. 设置排序方式
$m = D('user');
$user = $m->order('id')->select(); //按 `id` 字段排序
$user = $m->order('id DESC')->select(); //按 `id` 字段降序排序
## 6. 统计查询
$m = D('user');
$user = $m->where($where)->count(); //返回符合条件的数据总数
$user = $m->sum('point'); //point 字段求和
$user = $m->max('point'); //point 字段的最大值
$user = $m->min('point'); //point 字段的最小值
$user = $m->avg('point'); //point 字段的平均值
## 7. 数据分组
$user = $m->group('username')->select(); //按 username 字段分组
## 8. 聚合条件
**having 条件使用方法同 where 条件,详情请参照 where 条件**
$having = ['point >'=>100];
$user = $m->group('username')->having($having)->select();
$having = ['point >'=>100,'status'=>1];
$user = $m->group('username')->having($having)->select();
## 9. 关联查询
默认是 RIGHT JOIN:
$m = D('user');
$where['a.id'] = 1;
$join = 'group b ON a.groupid=b.groupid'; //关联 group 表查询
$list = $m->alias('a')->join($join)->where($where)->select();
指定 JOIN 类型:
$join = 'LEFT JOIN group b ON a.groupid=b.groupid'; //LEFT 关联
多个 JOIN 条件:
$m = D('user');
$where['a.id'] = 1;
$join[] = 'LEFT JOIN group b ON a.groupid=b.groupid';
$join[] = 'LEFT JOIN cart c ON c.uid=a.id';
/*...更多JOIN;*/
$list = $m->alias('a')->join($join)->where($where)->select();
## 10. 事务处理
begin() 开始事务
commit() 提交事务
rollback() 回滚事务
$m = D('user');
try{
$m->begin(); //开始事务处理
//....数据操作
if(!$m->commit()) throw new \Exception("提交失败!"); //提交事务
}catch(\Exception $e){//捕获错误信息
$m->rollback(); //回滚
return $e->getMessage();
}
## 11. 行锁
find() 和 select() 操作支持锁定数据行;
方法是 传入第二个参数为 true
该功能只能在事务处理中有效(也就是必须在 begin() 和 commit() 方法之间才会有效)
$m = D('user');
$where['id'] = 1;
try{
$m->begin();
$user = $m->where($where)->find(null,true); //锁定该行直到操作结束
if(!$user) throw new \Exception("用户数据不存在");
$result = $m->where($where)->setField('level',1);
if(!$result) throw new \Exception("设置用户等级失败");
if(!$m->commit()) throw new \Exception("提交失败!");
}catch(\Exception $e){
$m->rollback();
return $e->getMessage();
}