table = $table; } $this->is_cache = 0;//$this->isCache(); $this->uniacid = Session::get("uniacid");//平台id } public function isCache() { return 0; $cache_table = config("cache_table"); if(!empty($this->table) && in_array($this->table, $cache_table) && !env('APP_DEBUG', 0)) { return 1; } return 0; } /** * 获取列表数据 * @param array $condition * @param string $field * @param string $order * @param number $page * @param array $join * @param string $group * @param string $limit * @param string $data * @return mixed */ final public function getList($condition = [], $field = true, $order = '', $alias = 'a', $join = [], $group = '', $limit = null) { if ($this->is_cache && empty($join)) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } self::$query_obj = Db::name($this->table)->where($condition)->order($order); if (!empty($join)) { self::$query_obj->alias($alias); self::$query_obj = $this->parseJoin(self::$query_obj, $join); } if (!empty($group)) { self::$query_obj = self::$query_obj->group($group); } if (!empty($limit)) { self::$query_obj = self::$query_obj->limit($limit); } $result = self::$query_obj->field($field)->select()->toArray(); self::$query_obj->removeOption(); if ($this->is_cache && empty($join)) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } final public function all() { if ($this->is_cache) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_'; $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } $result = Db::name($this->table)->select()->toArray(); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } /** * 获取分页列表数据 * @param array $condition * @param bool | string $field * @param string $order * @param int $page * @param int $list_rows * @param string $alias * @param array $join * @param null $group * @param null $limit * @return mixed * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ final public function pageList($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [], $group = null, $limit = null) { // $condition[] = ['uniacid','=',$this->uniacid]; //关联查询多表无法控制不缓存,单独业务处理 if ($this->is_cache && empty($join)) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } self::$query_obj = Db::name($this->table)->alias($alias)->where($condition)->order($order); $count_obj = Db::name($this->table)->alias($alias)->where($condition)->order($order); if (!empty($join)) { $db_obj = self::$query_obj; self::$query_obj = $this->parseJoin($db_obj, $join); $count_obj = $this->parseJoin($count_obj, $join); } if (!empty($group)) { self::$query_obj = self::$query_obj->group($group); $count_obj = $count_obj->group($group); } if (!empty($limit)) { self::$query_obj = self::$query_obj->limit($limit); } $count = $count_obj->field($field)->count(); if($count > 0) { if ($list_rows == 0) { //查询全部 $result_data = self::$query_obj->field($field)->limit($count)->page($page)->select()->toArray(); $result[ 'page_count' ] = 1; } else { $result_data = self::$query_obj->field($field)->limit($list_rows)->page($page)->select()->toArray(); $result[ 'page_count' ] = ceil($count / $list_rows); } }else{ $result[ 'page_count' ] = 0; $result_data = []; } $result[ 'count' ] = $count; $result[ 'list' ] = $result_data; self::$query_obj->removeOption(); if ($this->is_cache && empty($join)) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } /** * 获取分页列表数据 * @param array $condition * @param bool $field * @param string $order * @param int $page * @param int $list_rows * @param string $alias * @param array $join * @param null $group * @param null $limit * @return mixed * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ final public function rawPageList($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [], $group = null, $limit = null) { //关联查询多表无法控制不缓存,单独业务处理 if ($this->is_cache && empty($join)) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } if (is_array($order)) { self::$query_obj = Db::name($this->table)->alias($alias)->where($condition)->order($order); $count_obj = Db::name($this->table)->alias($alias)->where($condition)->order($order); } else { self::$query_obj = Db::name($this->table)->alias($alias)->where($condition)->orderRaw($order); $count_obj = Db::name($this->table)->alias($alias)->where($condition)->orderRaw($order); } if (!empty($join)) { $db_obj = self::$query_obj; self::$query_obj = $this->parseJoin($db_obj, $join); $count_obj = $this->parseJoin($count_obj, $join); } if (!empty($group)) { self::$query_obj = self::$query_obj->group($group); $count_obj = $count_obj->group($group); } if (!empty($limit)) { self::$query_obj = self::$query_obj->limit($limit); } $count = $count_obj->field($field)->count(); if($count > 0) { if ($list_rows == 0) { //查询全部 $result_data = self::$query_obj->field($field)->limit($count)->page($page)->select()->toArray(); $result[ 'page_count' ] = 1; } else { $result_data = self::$query_obj->field($field)->limit($list_rows)->page($page)->select()->toArray(); $result[ 'page_count' ] = ceil($count / $list_rows); } }else{ $result_data = []; $result[ 'page_count' ] = 0; } $result[ 'count' ] = $count; $result[ 'list' ] = $result_data; self::$query_obj->removeOption(); if ($this->is_cache && empty($join)) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } /** * 获取单条数据 * @param array $where * @param string $field * @param string $join * @param string $data * @return mixed */ final public function getInfo($where = [], $field = true, $alias = 'a', $join = null, $data = null) { // $where[] = ['uniacid','=',$this->uniacid]; //关联查询多表无法控制不缓存,单独业务处理 if ($this->is_cache && empty($join)) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } if (empty($join)) { $result = Db::name($this->table)->where($where)->field($field)->find($data); } else { $db_obj = Db::name($this->table)->alias($alias); $db_obj = $this->parseJoin($db_obj, $join); $result = $db_obj->where($where)->field($field)->find($data); } if ($this->is_cache && empty($join)) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } /** * 获取单条数据 * @param array $where * @param string $field * @param string $join * @param string $data * @return mixed */ final public function getInfoNouniacid($where = [], $field = true, $alias = 'a', $join = null, $data = null) { //关联查询多表无法控制不缓存,单独业务处理 if ($this->is_cache && empty($join)) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } if (empty($join)) { $result = Db::name($this->table)->where($where)->field($field)->find($data); } else { $db_obj = Db::name($this->table)->alias($alias); $db_obj = $this->parseJoin($db_obj, $join); $result = $db_obj->where($where)->field($field)->find($data); } if ($this->is_cache && empty($join)) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } /** * join分析 * @access protected * @param array $join * @param array $options 查询条件 * @return string */ protected function parseJoin($db_obj, $join) { foreach ($join as $item) { list($table, $on, $type) = $item; $type = strtolower($type); switch ( $type ) { case "left": $db_obj = $db_obj->leftJoin($table, $on); break; case "inner": $db_obj = $db_obj->join($table, $on); break; case "right": $db_obj = $db_obj->rightjoin($table, $on); break; case "full": $db_obj = $db_obj->fulljoin($table, $on); break; default: break; } } return $db_obj; } /** * /** * 获取某个列的数组 * @param array $where 条件 * @param string $field 字段名 多个字段用逗号分隔 * @param string $key 索引 * @return array */ final public function getColumn($where = [], $field = '', $key = '') { if ($this->is_cache) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } $result = Db::name($this->table)->where($where)->column($field, $key); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } /** * 得到某个字段的值 * @access public * @param array $where 条件 * @param string $field 字段名 * @param mixed $default 默认值 * @param bool $force 强制转为数字类型 * @return mixed */ final public function getValue($where = [], $field = '', $default = null, $force = false) { if ($this->is_cache) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } $result = Db::name($this->table)->where($where)->value($field, $default, $force); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } /** * 新增数据 * @param array $data 数据 * @param boolean $is_return_pk 返回自增主键 */ final public function add($data = [], $is_return_pk = true) { // $data['uniacid'] = $this->uniacid; $res = Db::name($this->table)->insert($data, true, $is_return_pk); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->clear(); } return $res; } /** * 新增多条数据 * @param array $data 数据 * @param int $limit 限制插入行数 */ final public function addList($data = [], $limit = null) { $res = Db::name($this->table)->insertAll($data, false, $limit); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->clear(); } return $res; } /** * 更新数据 * @param array $where 条件 * @param array $data 数据 */ final public function update($data = [], $where = []) { $res = Db::name($this->table)->where($where)->update($data); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->clear(); } return $res; } /** * 设置某个字段值 * @param array $where 条件 * @param string $field 字段 * @param string $value 值 */ final public function setFieldValue($where = [], $field = '', $value = '') { $res = $this->update([ $field => $value ], $where); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->clear(); } return $res; } /** * 设置数据列表 * @param array $data_list 数据 * @param boolean $replace 是否自动识别更新和写入 */ final public function setList($data_list = [], $replace = false) { $res = Db::name($this->table)->saveAll($data_list, $replace); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->clear(); } return $res; } /** * 删除数据 * @param array $where 条件 */ final public function delete($where = []) { $res = Db::name($this->table)->where($where)->delete(); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->clear(); } return $res; } /** * 统计数据 * @param array $where 条件 * @param string $type 查询类型 count:统计数量|max:获取最大值|min:获取最小值|avg:获取平均值|sum:获取总和 */ final public function stat($where = [], $type = 'count', $field = 'id') { if ($this->is_cache) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } $result = Db::name($this->table)->where($where)->$type($field); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } /** * SQL查询 * @param string $sql * @return mixed */ final public function query($sql = '') { return Db::query($sql); } /** * 返回总数 * @param unknown $where */ final public function getCount($where = [], $field = '*', $alias = 'a', $join = null, $group = null) { if ($this->is_cache && empty($join)) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } if (empty($join)) { if (empty($group)) { $result = Db::name($this->table)->where($where)->count($field); } else { $result = Db::name($this->table)->group($group)->where($where)->count($field); } } else { $db_obj = Db::name($this->table)->alias($alias); $db_obj = $this->parseJoin($db_obj, $join); if (empty($group)) { $result = $db_obj->where($where)->count($field); } else { $result = $db_obj->group($group)->where($where)->count($field); } } if ($this->is_cache && empty($join)) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } /** * 返回总数 * @param unknown $where */ final public function getSum($where = [], $field = '', $alias = 'a', $join = null) { if ($this->is_cache && empty($join)) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } if (empty($join)) { $result = Db::name($this->table)->where($where)->sum($field); } else { $db_obj = Db::name($this->table)->alias($alias); $db_obj = $this->parseJoin($db_obj, $join); $result = $db_obj->where($where)->sum($field); } if ($this->is_cache && empty($join)) { Cache::tag("cache_table" . $this->table)->set($cache_name, $result); } return $result; } /** * SQL执行,注意只能处理查询问题,如果执行修改需要手动删除缓存 */ final public function execute($sql = '') { return Db::execute($sql); } /** * 查询第一条数据 * @param array $condition */ final function getFirstData($condition, $field = '*', $order = "") { if ($this->is_cache) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } $data = Db::name($this->table)->where($condition)->order($order)->field($field)->find(); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->set($cache_name, $data); } return $data; } /** * 查询第一条数据 * @param array $condition */ final function getFirstDataView($condition, $field = '*', $order = "", $alias = 'a', $join = [], $group = null) { if ($this->is_cache && empty($join)) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } self::$query_obj = Db::name($this->table)->alias($alias)->where($condition)->order($order)->field($field); if (!empty($join)) { $db_obj = self::$query_obj; self::$query_obj = $this->parseJoin($db_obj, $join); } if (!empty($group)) { self::$query_obj = self::$query_obj->group($group); } $data = self::$query_obj->find(); if ($this->is_cache && empty($join)) { Cache::tag("cache_table" . $this->table)->set($cache_name, $data); } return $data; } /** * 验证 * @param array $data * @param string $scene_name * @return array[$code, $error] */ public function fieldValidate($data, $scene_name = '') { $validate = new Validate($this->rule, $this->message); if (empty($scene_name)) { $validate_result = $validate->batch(false)->check($data); } else { $validate->scene($this->scene); $validate_result = $validate->scene($scene_name)->batch(false)->check($data); } return $validate_result ? [ true, '' ] : [ false, $validate->getError() ]; } /** * 事物开启 */ final public function startTrans() { return Db::startTrans(); } /** * 事物提交 */ final public function commit() { return Db::commit(); } /** * 事物回滚 */ final public function rollback() { // Cache::clear(); return Db::rollback(); } /** * 获取错误信息 */ final public function getError() { return $this->error; } /** * 自增数据 * @param array $where * @param $field * @param int $num * @return int * @throws \think\db\exception\DbException */ final public function setInc($where, $field, $num = 1) { $res = Db::name($this->table)->where($where)->inc($field, $num)->update(); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->clear(); } return $res; } /** * 自减数据 * @param $where * @param $field * @param int $num * @return int * @throws \think\db\exception\DbException */ final public function setDec($where, $field, $num = 1) { $res = Db::name($this->table)->where($where)->dec($field, $num)->update(); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->clear(); } return $res; } /** * 获取最大值 * @param array $where * @param $field * @return mixed */ final public function getMax($where, $field) { if ($this->is_cache) { $cache_name = $this->cache_prefix. $this->table . '_' . __FUNCTION__ . '_' . serialize(func_get_args()); $cache = Cache::get($cache_name); if (!empty($cache)) { return $cache; } } $data = Db::name($this->table)->where($where)->max($field); if ($this->is_cache) { Cache::tag("cache_table" . $this->table)->set($cache_name, $data); } return $data; } /** * 获取分页列表数据 只是单纯的实现部分功能 其他使用还是用pageList吧 * @param array $condition * @param bool $field * @param string $order * @param int $page * @param int $list_rows * @param string $alias * @param array $join * @param null $group * @param null $limit * @return array * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ final public function Lists($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [], $group = null, $limit = null) { self::$query_obj = Db::name($this->table)->alias($alias)->where($condition); $count_obj = Db::name($this->table)->alias($alias)->where($condition); if (!empty($join)) { $db_obj = self::$query_obj; self::$query_obj = $this->parseJoin($db_obj, $join); $count_obj = $this->parseJoin($count_obj, $join); } if (!empty($group)) { self::$query_obj = self::$query_obj->group($group); $count_obj = $count_obj->group($group); } if (!empty($limit)) { self::$query_obj = self::$query_obj->limit($limit); } $count = $count_obj->count(); if($count > 0) { if ($list_rows == 0) { //查询全部 $result_data = self::$query_obj->field($field)->order($order)->limit($count)->page($page)->select()->toArray(); $result[ 'page_count' ] = 1; } else { $result_data = self::$query_obj->field($field)->order($order)->limit($list_rows)->page($page)->select()->toArray(); $result[ 'page_count' ] = ceil($count / $list_rows); } }else{ $result[ 'page_count' ] = 0; $result_data = []; } $result[ 'count' ] = $count; $result[ 'list' ] = $result_data; self::$query_obj->removeOption(); return $result; } /** * 不读取缓存--获取单条数据 * @param array $where * @param string $field * @param string $join * @param string $data * @return mixed */ final public function getInfoTo($where = [], $field = true, $alias = 'a', $join = null, $data = null) { if (empty($join)) { $result = Db::name($this->table)->where($where)->field($field)->find($data); } else { $db_obj = Db::name($this->table)->alias($alias); $db_obj = $this->parseJoin($db_obj, $join); $result = $db_obj->where($where)->field($field)->find($data); } return $result; } public function setIsCache($is_cache = 1){ $this->is_cache = $is_cache; return $this; } }